如何获取matplotlib文本(x,y,“String”,bbox = ...)轴坐标

时间:2018-06-02 12:05:30

标签: python matplotlib

例如,我可以使用

创建带圆角框的文本
fig, ax = plt.subplots(1,1)
obj = ax.text(0.2, 0.6, "something", bbox = dict(boxstyle = 'round'))

现在我想获得情节中的圆角框角点。我尝试过使用

obj.clipbox.corners()

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

obj.clipbox.transformed(...)

仍然无效。我可以请求帮助吗?感谢。

1 个答案:

答案 0 :(得分:0)

首先请注意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]]

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