Смещение аннотаций по оси х в 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)
получите это:

