1

matplotlib を使用して宇宙船軌道の 2D ビューをプロットしています。この軌道上で、特定のイベントを特定してマークし、これらのイベントと対応する日付を凡例にリストします。図をファイルに保存する前に、軌道プロットを自動ズームします。これにより、凡例がプロットの上に直接印刷されます。私がやりたいことは、オートスケーリングの後、どうにかして凡例の幅を見つけてから、xaxis を拡張して、プロットの右側に凡例用の「スペースを作る」ことです。概念的には、このようなものです。

# ... code that generates my plot up here, then:
ax.autoscale_view()
leg = ax.get_legend()
leg_width = # Somehow get the width of legend in units that I can use to modify my axes
xlims = ax.get_xlim()
ax.set_xlim( [xlims[0], xlims[1] + leg_width] )
fig.savefig('myplot.ps',format='ps')

私が抱えている主な問題は、ax.set_xlim()「データ」固有の値を取得するのに対し、leg.get_window_extentレポートはウィンドウ ピクセルで (私が思うに)、キャンバスが描画された後でさえ、どのように凡例を取得できるかわかりません」 width」を上記と同様に使用できるようにします。

4

1 に答える 1

0

Figure を一度保存​​して実際の凡例の位置を取得してから、transData.inverted() を使用して画面座標をデータ座標に変換できます。

import pylab as pl
ax = pl.subplot(111)
pl.plot(pl.randn(1000), pl.randn(1000), label="ok")
leg = pl.legend()

pl.savefig("test.png") # save once to get the legend location

x,y,w,h = leg.get_window_extent().bounds

# transform from screen coordinate to screen coordinate
tmp1, tmp2 = ax.transData.inverted().transform([0, w])
print abs(tmp1-tmp2) # this is the with of legend in data coordinate

pl.savefig("test.png")
于 2012-05-10T13:37:41.990 に答える