2012-10-03 16 views
5

matplotlibの凡例に矩形をプロットしようとしています。matplotlibの凡例にどのように矩形を描くのですか?

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
import numpy as np 

Fig = plt.figure() 
ax = plt.subplot(111) 

t = np.arange(0.01, 10.0, 0.01) 
s1 = np.exp(t) 
ax.plot(t, s1, 'b-', label = 'dots') 

leg = ax.legend() 

rectangle = Rectangle((leg.get_frame().get_x(), 
        leg.get_frame().get_y()), 
        leg.get_frame().get_width(), 
        leg.get_frame().get_height(), 
        fc = 'red' 
       ) 

ax.add_patch(rectangle) 

plt.show() 

長方形だけの図のどこに描画していない:私は動作しません私の最高の試みは、表示され得ているどこまで説明し

。 leg.get_frame()、get_frame()、leg_get()、leg_get()、leg_get_frame()、leg_get_frameそれらがそれぞれ 0.0,0.0,1.0,1.0であることを確認してください。

したがって、私の問題は、伝説のフレームの座標を見つけることにあります。

あなたが私を助けることができれば本当に素晴らしいでしょう。

これまで読んでいただきありがとうございます。

+1

なぜこれを実行しようとしていますか?あなたのために行う「伝説」オブジェクトに組み込まれたものがないと確信していますか? – tacaswell

答えて

2

凡例の位置があらかじめわかっていないという問題があります。図をレンダリングするときまでに(plot()と呼ぶ)、位置が決定されます。

私が来た解決策は、acrossが二度描くことです。さらに、軸座標(デフォルトはデータ座標)を使用して、矩形を拡大/縮小して、その背後にある凡例を見ています。凡例と長方形zorderも設定しなければならないことに注意してください。凡例は矩形より後で描画されるため、矩形は凡例の後ろに消えます。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 

Fig = plt.figure() 
ax = plt.subplot(111) 

t = np.arange(0.01, 10.0, 0.01) 
s1 = np.exp(t) 
ax.plot(t, s1, 'b-', label = 'dots') 

leg = ax.legend() 
leg.set_zorder(1) 
plt.draw() # legend position is now known 
bbox = leg.legendPatch.get_bbox().inverse_transformed(ax.transAxes) 
rectangle = Rectangle((bbox.x0, bbox.y0), 
         bbox.width*0.8, bbox.height*0.8, 
         fc='red', transform=ax.transAxes, zorder=2) 
ax.add_patch(rectangle) 
plt.show() 
関連する問題