首页 > 解决方案 > 如何获取 matplotlib text(x, y, "String", bbox=...) 轴坐标

问题描述

例如,我可以使用圆角框创建文本

fig, ax = plt.subplots(1,1)
obj = ax.text(0.2, 0.6, "something", bbox = dict(boxstyle = 'round'))

现在我想得到图中的圆角框角点。我试过使用

obj.clipbox.corners()

但它不返回情节的点,它与情节中的点不匹配。也尝试过使用

obj.clipbox.transformed(...)

还是不行。我可以在这方面寻求帮助吗?谢谢。

标签: pythonmatplotlib

解决方案


首先请注意,clipbox这是剪辑艺术家的框。这通常是轴边界框。因此,它与文本周围的框无关。

现在您可以通过以下方式获得文本周围的框

obj = ax.text(...)
box = obj.get_bbox_patch()

问题是文本周围的框的大小和位置只有在实际绘制文本后才确定。在此之前,它不知道自己在哪里。

所以首先你需要绘制画布。这将更新框的坐标。然后您可以通过 获取框的窗口范围box.get_window_extent()。这将给出显示空间中的坐标(图形的像素),因此您需要将它们转换回数据坐标。

fig.canvas.draw()
coords = ax.transData.inverted().transform(box.get_window_extent())
print(coords)

这打印

[[ 0.19159946  0.58060967]
 [ 0.35633401  0.64103535]]

这是文本周围框的数据坐标(第一行左下角,第二行右上角)。


推荐阅读