2017-06-22 167 views
0

采取随机散点图与具有随机偏移注释: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 

我知道我可以使用像THI变换得到的轴坐标S:

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

但我更喜欢它,如果有让他们直接的方式,尤其是因为我无法相信坐标不某处文本实例中,因为userland-和显示书面轴同样也在那里。

回答

0

使用不同坐标系统的整个想法,比如这里的“偏移点”,就是在绘制相应的艺术家之前,显示坐标实际上并不知道。而且他们不需要知道。没有理由让艺术家需要将自己的位置存储在其他坐标系中,然后进行转换 - 这是转换背后的想法。

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

当然,您可以像计算get_window_extent()一样计算它们,然后获取轴坐标以应用反轴转换。

+0

但是,如何显示坐标未知解释轴坐标未知?由于轴和图形坐标是0和1之间的相对坐标,因此它们与显示大小无关,并且可以很容易地保存在某个变量中。轴的'ax.get_position()'确实返回轴的图形坐标,但是相同的文本对象的方法只返回用户区坐标“xy”中初始位置的偏移量'xyann'。 – Khris

+0

由于文本位于偏移点,其坐标位于偏移点。所以变换链可以是offset-> data-> display-> axes。我没有看到存储其图形坐标的轴(这很有用,因为它们定义轴的位置)与文本有关。换句话说,如果您在偏移坐标中定义轴的位置,它也不会知道它的图形坐标。 – ImportanceOfBeingErnest

+0

如果我在偏移坐标中定义我的坐标轴的位置,它仍然会偏离某个定义的点,并且获得坐标图应该很容易。 困扰我的另一件事是,你必须在这里通过显示进行转换。为什么不可能直接从数据转换为坐标轴? – Khris