2017-06-22 7 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

ここで「オフセットポイント」のような異なる座標系を使用するという考えは、それぞれのアーティストを描画する前に表示座標が実際にはわからないということです。そして彼らは知られている必要はありません。アーティストが他の座標系でその位置を保存してから、その変換の1つを保存する必要はありません。それが変換の背後にあるアイデアです。

質問に答えてください:いいえ、表示座標はどこにも格納されず、したがって軸座標でもありません。

もちろん、get_window_extent()のように計算してから、軸座標を取得すると、逆軸変換を適用することができます。

+0

しかし、表示座標が不明であると軸座標が不明であることがどのように説明されますか?軸と図形座標は0と1の間の相対座標であるため、表示サイズとは無関係であり、いくつかの変数に簡単に保存できます。 axesの 'ax.get_position()'は軸のFigure座標を正確に返しますが、text-objectsの同じメソッドは、ユーザランド座標 'xy'の最初の位置からオフセット' xyann'を返します。 – Khris

+0

テキストはオフセットポイントに配置されているため、その座標はオフセットポイントになります。したがって、変換チェーンはオフセット - >データ - >表示 - >軸になります。私は、座標軸を格納している軸(軸の位置を定義しているので便利です)がテキストと関係しているかどうかわかりません。つまり、オフセット座標で軸の位置を定義すると、その座標も認識されません。 – ImportanceOfBeingErnest

+0

軸の位置をオフセット座標で定義すると、定義された点からオフセットされてしまい、図の座標を簡単に得ることができます。 もう一つ気になるのは、ここで展示を変えなければならないということです。なぜデータから軸へ直接変換できないのですか? – Khris

関連する問題