Я полагаю, что ваша основная проблема заключалась в том, что вы эффективно разместили текст в направлении 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")