我想用 ax.text()
旁边的yAxis标签。为此,我读出标签的位置,并像这样变换。
labelpos = ax.yaxis.label.get_window_extent()
box = labelpos.transformed(ax.transAxes.inverted())
为了控制位置,我使用了一个矩形 .patches
像这样。
rect = Rectangle((box.xmin,box.ymin),box.width,box.height,
clip_on=False, fill=False, transform= ax.transAxes,ec='r', zorder=1000)
ax.add_patch(rect)
这就是结果
正如你所看到的,位置并不总是正确的 As you can see, the position is not always right. 看起来好像是ticklabel的宽度有关系。我怎样才能补偿这个问题呢?.get_ticklabel_extents
,将其转换并创建一个矩形。
extents1, extents2 = ax.yaxis.get_ticklabel_extents(renderer = fig.canvas.get_renderer())
box = extents2.transformed(ax.transAxes.inverted())
这就是结果
但是,当标签上的刻度线变长时,仍然有相同的偏移量。任何想法?
EDIT:
经过一些研究,我发现我的问题可能会更深一层,对于...matplotlib.artist.Artist.get_window_extent
它说 从此:
使用此功能时要注意,如果艺术家的窗口范围发生变化,结果将不会更新。
所以......会不会是标签被艺术家移动了,所以无法读出当前位置?
解决方案:使用 复合标注有了这个功能,就可以将注解精确地定位到 axislabel 上。
an1 = par.annotate("text", xy=(0, 0), xycoords=ax.yaxis.label,
xytext=(0, -20), textcoords="offset points",
va="center", ha="left",rotation=90)
在这里回答。matplotlib论坛