在堆叠的条形图上适当放置注释

时间:2019-04-16 09:26:47

标签: python matplotlib

我已经在堆叠的条形图上注释了每个条形,但是似乎无法获得与条形位置相同的注释。

这是我的代码:

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 个答案:

答案 0 :(得分:2)

我想您的主要问题是,您在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"参数将文本精确地对准所选坐标(水平:ha和垂直:va),如果您想放置标签,例如,可以方便使用。在贴片顶端下方对齐:

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")