获取图形坐标Matplotlib注释标签的坐标
我想知道图形分数坐标Matplotlib图的文本注释的边界矩形的坐标。但是,当我尝试访问与注释关联的修补程序的“范围”时,无论文本标签的大小如何,我都会得到Bbox(x0=-0.33, y0=-0.33, x1=1.33, y1=1.33)
。这些坐标似乎与IdentityTransform
相关联,但不会转换为任何有意义的数字分数坐标。 如何获得标注的坐标(理想情况下,左下角和右上角)的图形分数单位?获取图形坐标Matplotlib注释标签的坐标
实施例:
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'
)
patch = ann.get_bbox_patch() print(patch.get_extents())
给出:
[[-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
对象的边界框只包含框内相对于文本的坐标。
因此有必要先绘制图形然后访问边界框。
fig.canvas.draw() patch = ann.get_bbox_patch()
box = patch.get_extents()
print box
#prints: Bbox(x0=263.6, y0=191.612085684, x1=320.15, y1=213.412085684)
由于这些是在显示单元的框的坐标,它们需要被tranformed推测单元
tcbox = fig.transFigure.inverted().transform(box) print tcbox
#prints [[ 0.411875 0.39919185]
# [ 0.50023438 0.44460851]]
# The format is
# [[ left bottom]
# [ right top ]]
这将返回图单位(范围从0到1)的边界框围绕文本的矩形。
如果不是文本本身是什么beeing问一个可以使用的
matplotlib.text.Text
的
get_window_extent()
方法并提供注释对象作为参数的边界框。使用
box = matplotlib.text.Text.get_window_extent(ann) print box
# prints Bbox(x0=268.0, y0=196.012085684, x1=315.75, y1=209.012085684)
可以像上面那样进行操作以获得图中单位的框。
以上是 获取图形坐标Matplotlib注释标签的坐标 的全部内容, 来源链接: utcz.com/qa/258310.html