Надлежащее размещение аннотаций на сложенном барплете - PullRequest
0 голосов
/ 16 апреля 2019

Я аннотировал каждый столбец на своем столбце с накоплением, но, похоже, не могу получить аннотации, эквивалентные позиции бара.

Это код, который у меня есть:

for i in ax_mult.patches:
  width,height=i.get_width(),i.get_height()
  x,z =i.get_xy()
  ax_mult.annotate(str(i.get_height()),(i.get_x()+.30*width,i.get_height()+.1*height))

Это то, что я получаю enter image description here

1 Ответ

2 голосов
/ 16 апреля 2019

Я полагаю, что ваша основная проблема заключалась в том, что вы эффективно разместили текст в направлении y на 1.1 * i.get_height(), без учета начального смещения i.get_y().

Попробуйте это:

for i in ax_mult.patches:
    ix,iy=i.get_x(),i.get_y() ## gives you the bottom left of each patch
    width,height=i.get_width(),i.get_height() ## the width & height of each patch

    ## to place the annotation at the center (0.5, 0.5):
    ax.annotate(str(height),(ix+0.5*width, iy+0.5*height),ha="center",va="center")

    ## alternatively via ax.text():
    # ax.text(ix+.5*width,iy+.5*height,height,ha="center",va="center" ) 

Обратите внимание, что вам может понадобиться "поиграть" с хорошими смещениями, особенно в направлении y. Параметры ha="center",va="center" выравнивают текст точно по выбранной координате (по горизонтали: га и по вертикали: ва), что удобно, если вы хотите разместить метки, например. выровнен ниже верхнего конца патча:

ax.annotate(str(height),(ix+0.5*width, iy+1.0*height),ha="center",va="top")

Или чуть выше верхнего конца патча:

ax.annotate(str(height),(ix+0.5*width, iy+1.0*height),ha="center",va="bottom")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...