2016-05-27 10 views
4

大きな2つの軸のパネルがあり、大きいものの中に小さいもの(灰色)があります(白色)。Matplotlib:別のAxesパネルの上に線をオーバープロットする

次のコードでは、青色の線が灰色の小さな軸のパネルの上にあることを期待しています。青い線は、非常に高いzorderに設定されています。しかしそれは事実ではないことが分かります。

小さなパネルのパッチのzorderを変更しても効果はありません。

私は透明で(またはそれを不可視に)するために、小さなパネルの背景を設定した場合、それが必要とされる状況があるかもしれないので、それから、青い線がブロックされていない表示されますが、この解決策は満足のいくものではないが小さなパネルの背景を不透明に保つ。

このような要件は簡単な方法では達成できません。実装すると、zorderの行は同じ軸内でのみ意味がありますか?

f = figure() 

ax1 = f.add_axes([0.1,0.1,0.8,0.8], zorder=1) 
ax2 = f.add_axes([0.3,0.2,0.5,0.4], zorder=2) 
ax2.patch.set_facecolor('gray') 
ax2.patch.set_zorder(-9999999) 
ax1.plot([0,1], [0,1], zorder=99999999, color='blue') 
ax2.plot([0,1], [0,3], zorder=-99999, color='red') 

# New Edit: 
# To make the problem more to the point, what if someone 
# also wants the background of the big panel to be green 
# (with the following command)? See the second figure. 
ax1.patch.set_facecolor('green') 
# This seems to mean that the small panel really has to 
# somehow "insert" into the z-space between the big panel 
# and the blue line. 

Figure generated by the following code New image

答えて

2

...白に図形全体の顔の色を設定してください、私たちはただ妥協しなければならないと思うので、私が思い付くソリューションは、第三の層を追加することです軸は透明で、それは本当に青い線を描く者です。

もちろん、最初のレイヤー(ax1)を冗長要素を抑制するために微調整する必要があります(たとえば、デフォルトでax1には軸のラベルとティックがありますが、下に隠れています)。

f = figure() 

ax1 = f.add_axes([0.1,0.1,0.8,0.8], zorder=0) 
ax1.patch.set_facecolor('green') 

ax2 = f.add_axes([0.3,0.2,0.5,0.4], zorder=1) 
ax2.patch.set_facecolor('gray') 

ax2.plot([0,1], [0,3], color='red') 

ax3 = f.add_axes([0.1,0.1,0.8,0.8], zorder=2) 
ax3.patch.set_alpha(0) 
ax3.plot([0,1], [0,1], color='blue') 

enter image description here

2

(ZORDERはあなたの例から逆転されている場合)、その後(大きい方)最初から「不透明」白色の背景には軸が第二(小さい方)の軸と重なっているように思われますので、より大きな軸の顔の色を透明にするだけです。また

f.set_facecolor('white') 

ax2 = f.add_axes([0.3,0.2,0.5,0.4], zorder=1) 
ax2.patch.set_facecolor('gray') 
ax2.plot([0,1], [0,3], color='red') 

ax1 = f.add_axes([0.1,0.1,0.8,0.8], zorder=2) 
ax1.plot([0,1], [0,1], color='blue') 
ax1.patch.set_alpha(0.0)#make background transparent 

enter image description here

+0

はい、これは非常に巧妙なソリューションです!そして、私はそれがまだ理想的ではないことに同意します。特に、厄介な人が大きなパネルの背景色を非白色(例えば緑色)に設定したい場合は、 – FJDU

+0

は前の投稿を編集しました。これはあなたを稼働させるはずです。 – Logic1

+1

はい、ソリューションは機能しますが、大きなパネルを緑色にする必要がある場合は、図形のfacecolorがパネルだけでなく図形全体を緑色にします。 – FJDU

関連する問題