0

matplotlib.PatchCollectionプロットに追加したいものがあります。しかし、プロットに直接追加しているテキストやその他のパッチもあります。したがって、次のようになります。

node.shape = RegularPolygon((node.posX, node.posY),
                            6,
                radius = node.radius,
                                    edgecolor = 'none',
                                    facecolor = node.fillColor,
                                    zorder = node.zorder)


self.patches.append(node.shape)
self.p = PatchCollection(self.patches, edgecolor = 'none', match_original=True )       
self.plotAxes.add_collection(self.p) 

#Two previously instantiated patches (they are visible)
self.plotAxes.add_artist(selectionRect)
self.plotAxes.add_artist(brushShape)

self.plotCanvas.draw()

コレクション内のパッチが重なる可能性があるため、コレクション内のパッチを最初に描画し、次に、selctionRect後でbrushShape描画するようにします。もしそうなら、それらは見えるはずです。ただし、私のプロットでは、コレクション内のパッチが最後に描画されたかのように常に表示されます。どうすればこれを回避できますか?どんな助けでも大歓迎です。

編集:機能しているように見えることの1つは、2つのPatchCollectionを保持することです。ただし、これを行うと、可視性をfalseに設定することはできないようです。PatchCollectionセットは値などをリセットしますか?

4

1 に答える 1

0

アダムがあなたが設定したいコメントで言ったようにzorder、それはそれらが互いの上に描かれるときに物事がどの順序で層になるかを設定します、より高いzorderものはより低いものと重なりzorderます。

すべてにデフォルトがありますが、関数呼び出しにkwargをzorder追加することで、その値をオーバーライドできます。zorderこれはArtistkwargなので、基本的にプロット関数はそれを尊重する必要があります(そして、バグレポートをgithubサイトに送信しないものを見つけた場合)

plt.figure()
ax = plt.gca()
ax.plot(range(5), zorder=2, lw=10)
ax.plot(range(5)[::-1], zorder=1, lw=10)

vs

plt.figure()
ax = plt.gca()
ax.plot(range(5), zorder=1, lw=10)
ax.plot(range(5)[::-1], zorder=2, lw=10)

zorderデモ

于 2013-01-25T05:47:26.350 に答える