Добавление меток поверх barplat matplotlib [duplicate]

Для Scala вы можете использовать библиотеку, которую я создал: https://github.com/kypeli/sversion

  Версия ("1.2") & gt;  Версия ("1.1") // true Version ("1.2.1") & gt;  Версия ("1.1.2") // true Version ("1.1.1") == Version ("1.1.1") // true Version ("1.1.1") & gt;  Версия ("1.1") // true Version ("1.1.0") == Версия ("1.1") // true Version ("1.1-RC2") & gt;  Версия («1.1-RC1») // истинная версия («1.1-RC1») & gt;  Версия ("1.1") // true  

35
задан DataSwede 22 August 2014 в 16:31
поделиться

2 ответа

Вы получаете его прямо из патчей осей:

In [35]: for p in ax.patches:
    ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))

Вы хотите настроить форматирование строк и смещения, чтобы получить объекты по центру, возможно, используйте ширину от p.get_width(), но это должно заставить вас начать. Может не работать со штабелями, если вы не отслеживаете смещения где-нибудь.

55
ответ дан TomAugspurger 16 August 2018 в 00:16
поделиться
  • 1
    Спасибо @TomAugsPurger, работало следующее: for p in ax.patches: ax.annotate(np.round(p.get_height(),decimals=2), (p.get_x()+p.get_width()/2., p.get_height()), ha='center', va='center', xytext=(0, 10), textcoords='offset points') – leroygr 22 August 2014 в 15:34
  • 2
    Другой вопрос: как бы вы обрабатывали бары с отрицательными значениями? С помощью приведенного выше кода метки всегда имеют положительные координаты, даже если значение столбца отрицательное. – leroygr 22 August 2014 в 16:05
  • 3
    Есть ли аналогичное решение для горизонтальных баров: kind = barh? – Nickpick 5 October 2015 в 15:42
  • 4
    Я нашел, что это работает для barh: ax.annotate(str(p.get_width()), (p.get_x() + p.get_width(), p.get_y()), xytext=(5, 10), textcoords='offset points') – ksindi 4 January 2016 в 21:00
  • 5
    Спасибо @capitalistpug. Я обнаружил, что добавление горизонтального выравнивания сделало вас лучше. ax.annotate(str(int(p.get_width())), (p.get_x() + p.get_width(), p.get_y()), xytext=(-2, 4), textcoords='offset points', horizontalalignment='right') +1 – DaveL17 14 December 2016 в 23:02

Решение, которое обрабатывает также отрицательные значения с формированием плавающего образца.

Все еще нуждается в настройках смещения.

df=pd.DataFrame({'A':np.random.rand(2)-1,'B':np.random.rand(2)},index=['val1','val2'] )
ax = df.plot(kind='bar', color=['r','b']) 
x_offset = -0.03
y_offset = 0.02
for p in ax.patches:
    b = p.get_bbox()
    val = "{:+.2f}".format(b.y1 + b.y0)        
    ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))

16
ответ дан tworec 16 August 2018 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: