Matplotlibプロットに対するテキスト注釈の境界矩形の座標をFigureの小数点座標で知りたいと思います。しかし、注釈に関連付けられたパッチの「エクステント」にアクセスしようとすると、テキストラベルのサイズに関係なく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]]
おそらく、これらは表示座標ですが、プロパティを必要とするラベルの位置とサイズには対応していません。
ありがとう - 私は問題があります: 'plt.show()'の後に正しいbbox座標を再現できるだけです: 'fig.canvas.draw()'を呼び出すだけでは不十分です...これはバックエンドの問題?私はOS Xを使っています。 – xnx
私はMacで何の経験もしていないので、この方法はバックエンド 'agg'、' TkAgg'、 'Qt4Agg'を使ってWindowsのmatplotlib 1.5で動作するとしか言えません。 – ImportanceOfBeingErnest
Yup - Mac OS Xバックエンドのバグです。 'agg'でうまく動作します。ご協力いただきありがとうございます。 – xnx