2013-01-24 31 views
0

我有一個matplotlib.PatchCollection,我想添加到一個繪圖。但我也有直接添加到情節中的文本和其他修補程序。所以它看起來像這樣: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() 

我希望我收集的修補軟件中繪製第一,然後selctionRectbrushShape之後必須繪製,因爲它們可以在收藏重疊補丁。如果他們這樣做,他們應該是可見的。但是,我的情節總是顯示集合中的修補程序,就好像它們已經繪製完畢一樣。我怎樣才能解決這個問題?任何幫助表示讚賞。

編輯:似乎工作的一件事是保持2 PatchCollections。但是,當我這樣做時,似乎我永遠無法將可見度設置爲假。 PatchCollection是否設置重置值或什麼?

+1

我相信你可以改變z值來改變上面標繪的東西。較高的z值置於頂部。 –

回答

0

正如亞當在您要設置zorder,這臺什麼樣的順序東西層,當他們在彼此的頂部繪製的評論說,事情具有較高zorder將重疊的東西以較低zorder

所有內容都有默認的zorder,但是您可以通過在函數調用中添加zorder kwarg來覆蓋該值。這是一個Artist kwarg,所以基本上過繪圖功能應該尊重它(如果你發現一個不提交錯誤報告,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 demo

+0

我看到這個工程,當我只是使用add_artist(補丁),但即使當我調整我的收藏zorder我仍然得到同樣的問題。 PatchCollections本身是否具有zorder或者是否所有的補丁都使用其各自的值? – Sterling

+0

@Sterling補丁集合是藝術家和他們自己,你可以設置整個集合的zorder。我不確定集合中的重疊如何排列。 – tacaswell