获取图形坐标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

回到顶部