Matplotlib:直接获取注释框的轴坐标?

时间:2017-06-22 12:56:38

标签: python matplotlib

使用带有随机偏移的注释的随机散点图:

import matplotlib.pyplot as mpp
import random as rd

X = [1,3,2,5,4,2,3,1,2,3]
Y = [4,1,3,2,6,5,2,5,1,5]
L = ['A','B','C','D','E','F','G','H','I','J']

fig,ax = mpp.subplots()
ax.scatter(X,Y)
for i,txt in enumerate(L):
    r1 = rd.choice([-10,5])
    r2 = rd.choice([-10,5])
    a = ax.annotate(txt,(X[i],Y[i]),size=8,textcoords='offset points',xytext=(r1,r2))
fig.show()

我试图找到那些注释的轴坐标,但我没有任何运气,文本实例的大多数变量奇怪地只返回偏移量:

print(ax.texts[0].xy)
print(ax.texts[0].xyann)
print(ax.texts[0]._x,ax.texts[0]._y)
print(ax.texts[0].get_position())
print(ax.texts[0].get_unitless_position())
print(ax.texts[0]._get_xy_display())
print(ax.texts[0].clipbox)

返回:

(1, 4)
(-10, 5)
-10 5
(-10, 5)
(-10.0, 5.0)
[-10.   5.]
None

我知道我可以使用这样的变换获得轴坐标:

ax.figure.canvas.draw()
bb = ax.texts[0].get_window_extent()
co = ax.transAxes.inverted().transform(bb)

但我更喜欢它,如果有直接获取它们的方式,特别是因为我无法相信轴坐标不会写在该文本实例中的某处,因为用户区和显示坐标在那里好。

1 个答案:

答案 0 :(得分:0)

使用不同坐标系的整个想法,例如"偏移点"这里是在绘制相应的艺术家之前实际上不知道显示坐标。而且他们不需要被人知道。艺术家没有理由需要将其位置存储在其他坐标系中,然后是其变换 - 这是变换背后的想法。

所以回答这个问题:不,显示坐标不存储在任何地方,因此也不是轴坐标。

当然,您可以像使用get_window_extent()一样要求计算它们,然后获取轴坐标应用逆轴变换。