我想知道Matplotlib图中文本注释的边界矩形的坐标。但是,当我试图访问与注释相关联的补丁的“扩展”时,无论文本标签的大小,我都得到Bbox(x0=-0.33, y0=-0.33, x1=1.33, y1=1.33)
。这些坐标似乎与IdentityTransform
相关,但不会转换成任何有意义的分数坐标。
在理想情况下,如何获得右下角的坐标?在
示例:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return 10 * np.sin(3*x)**4
x = np.linspace(0, 2*np.pi, 100)
y = f(x)
fig, ax = plt.subplots()
ax.plot(x,y)
xpt = 1.75
ypt = f(xpt)
xy = ax.transData.transform([xpt, ypt])
xy = fig.transFigure.inverted().transform(xy)
xytext = xy + [0.1, -0.1]
rdx, rdy = 0, 1
ann = ax.annotate('A point', xy=xy, xycoords='figure fraction',
xytext=xytext, textcoords='figure fraction',
arrowprops=dict(arrowstyle='->', connectionstyle="arc3",
relpos=(rdx, rdy)),
bbox=dict(fc='gray', edgecolor='k', alpha=0.5),
ha='left', va='top'
)
^{pr2}$
给出:
[[-0.33 -0.33]
[ 1.33 1.33]]
c = patch.get_transform().transform(patch.get_extents())
print(c)
给出:
[[-211.2 -158.4]
[ 851.2 638.4]]
这些可能是显示坐标,但它们与我想要的属性的标签的位置和大小不符。在
在绘制图形之前,
text
对象的边界框只包含框相对于内部文本的坐标。在因此有必要先绘制图形,然后访问边界框。
因为这些是显示单位中方框的坐标,所以需要将它们转换为图形单位
^{pr2}$这将返回文本周围矩形的边界框(以图形单位表示,范围从0到1)。在
如果需要坐标轴,则
或者如果需要数据坐标
如果文本本身的边界框是所要求的,那么可以使用
get_window_extent()
方法,matplotlib.text.Text
并提供注释对象作为参数。使用您可以按上述步骤来获得数字单位的方框。在
相关问题 更多 >
编程相关推荐