Смещение аннотаций по оси х в matplotlib

Есть датасет, по нему строится график. На графике отмечаются аннотации в виде максимальных значений. Я пытаюсь выставить аннотации по центру столбцов, путем их смещения. Смещение по оси y так, чтобы аннотация не касалась самих столбцов, получается. Смещение вправо почему-то не работает. Код:

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

phones = pd.read_csv('1.8_phones.csv', encoding='utf-8', header=None)
phones.drop(phones.index[0],  inplace=True)
phones.rename(columns={0: 'disk', 1: 'os', 2: 'price', 3: 'year'}, inplace=True)
phones['disk'] = phones['disk'].astype(int)
phones['price'] = phones['price'].astype(int)
phones['year'] = phones['year'].astype(int)

fig, ax = plt.subplots(figsize = (15, 6))
ax.hist(phones['price'], bins = 20, color = 'green')
plt.xlabel('Цена')
plt.ylabel('Кол-во моделей')
plt.title('Распределение цен телефонов', fontsize = 15)
ax.grid()
for i in ax.patches:
    ax.annotate('%1.0f'%(i.get_height()),(i.get_x()+1, i.get_height()+0.2), fontsize = 8)
plt.show()

Почему не работает смещение аннотаций в

i.get_x()+1

Вместо 1 может быть любое число.

введите сюда описание изображения


Ответы (2 шт):

Автор решения: CrazyElf

Почему-то высота и ширина похоже в разных единицах считаются, для x 1 это очень мало. У меня нормально отцентрировалось примерно по такой формуле:

i.get_x()+i.get_width()//2-10
→ Ссылка
Автор решения: strawdog

Сделайте так:

for i in ax.patches:
    ax.annotate('%1.0f'%(i.get_height()),(i.get_x()+i.get_width()/2, i.get_height()+0.2), fontsize = 8)

получите это:

введите сюда описание изображения

→ Ссылка