2016-03-25 19 views
0

Figure内のすべてのサブプロットをオーバーレイすることができる凡例を作成します。私がそのframealpha=1.0を設定した場合、それはそのサブプロット上のものをカバーしますが、私は他のサブプロットのデータの「上に」置く必要があります。伝説の後ろを通るためには赤い線が必要です。 '上'で私はzの次元ではなく、そのyの位置について話しています。ここでmatplotlib:凡例を他のサブプロットの上に表示します。

は一例です:

import matplotlib.pyplot as plt 
import numpy as np 

x1 = np.random.rand(25) 
y1 = np.random.rand(25) 
x2 = np.random.rand(25) 
y2 = np.random.rand(25) 

f, axes = plt.subplots(1,2) 
axes[0].plot(x1,y1,'b-',label='data 1 blah blah blah this is a wide legend that should sit top of BOTH subplots') 
axes[1].plot(x2,y2,'r-') 
axes[0].axis('off') 
axes[1].axis('off') 

leg = axes[0].legend(bbox_to_anchor=(0.5, .8), loc=2, fontsize=8, frameon=True, framealpha = 1.0) 
rect = leg.get_frame() 
rect.set_facecolor([0.9,0.9,0.9]) 
leg.set_zorder(100) 
plt.show() 

enter image description here

THANKS!

答えて

2

一般に、zorderは、異なるアーティストが描かれる順序を変更する(例えば、関連するdemomatplotlibから参照)。

サブプロットのすべてがzorderaxes[0]におけるサブプロットの子供である伝説のために設定されているという事実に由来しの上にオーバーレイ伝説を持っていないのOPが提起した問題。したがって、その値を変更すると、axes[0]以内のオーダーにしか影響しません。 get_zorder(例:axes[0].get_zorder())を使用すると、異なるサブプロットのzorderを確認することができ、axes[0]axes[1]に同じzorderがあることがわかります。これにより、右側のサブプロットの前景に凡例が表示されなくなります。

axes[0]が凡例を含むプロットであるため、そのzorderを高い値(たとえば、axes[0].set_zorder(100))に設定する必要があります。 これにより、次の図に示すように、凡例が正しく表示されます。 異なる順序での描画は、図のアーティストが一般化できることに注意してください。 の便利な機能の1つはget_children()であり、図の中のすべてのアーティストを返すので、すべてを反復することができます 。 Resulting image with legend correctly on the foreground.

+0

「上に」とは、例では赤い線の上に凡例があることを意味します。 zorderは他のものの上に横たわっていきたいものです。私は明確にするために私の質問を編集しました。 – NPMitchell

+0

申し訳ありませんが、私は質問の冒頭で誤解していました。もっと明確な質問に感謝します。今私は、すべてのサブプロットの上に伝説を持つというあなたの具体的な質問に答える答えを変更しました。 – albertoql

関連する問題