次のスクリプトを実行するとします。
import matplotlib.pyplot as plt
lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b')
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r')
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g')
plt.show()
これにより、以下が生成されます。
Pythonを選択する代わりに、レイヤーの上下の順序を指定するにはどうすればよいですか?
なぜzorder
にそのような振る舞いがあるのかはわかりませんが、それはおそらくバグであるか、少なくとも文書化されていない機能です。プロット(グリッド、軸など)を作成するとき、および要素にzorder
を指定しようとするときに、zorder
への自動参照が既に存在するためである可能性があります。どういうわけかそれらを重複しています。これは、いずれの場合でも仮定です。
問題を解決するために、zorder
の違いを誇張してください。たとえば、0,1,2
の代わりに、0,5,10
にします。
import matplotlib.pyplot as plt
lineWidth = 20
plt.figure()
plt.plot([0,0],[-1,1], lw=lineWidth, c='b',zorder=10)
plt.plot([-1,1],[-1,1], lw=lineWidth, c='r',zorder=5)
plt.plot([-1,1],[1,-1], lw=lineWidth, c='g',zorder=0)
plt.show()
、これは次のようになります。
このプロットでは、質問に示されている反対の順序を指定しました。
レイヤーは、プロット関数の対応する呼び出しと同じ順序で下から上に積み重ねられます。
import matplotlib.pyplot as plt
lineWidth = 30
plt.figure()
plt.subplot(2, 1, 1) # upper plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='b') # bottom blue
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='g') # top green
plt.subplot(2, 1, 2) # lower plot
plt.plot([-1, 1], [-1, 1], lw=5*lineWidth, c='g') # bottom green
plt.plot([-1, 1], [-1, 1], lw=3*lineWidth, c='r') # middle red
plt.plot([-1, 1], [-1, 1], lw=lineWidth, c='b') # top blue
plt.show()
下の図から明らかなように、プロットはbottom first、top lastルールに従って配置されます。