2012-12-01 39 views
4

我正在使用嵌入WxPython GUI中的matplotlib圖來顯示一些數據。 圖形(顯示數據)的內容隨着按鈕的點擊而不斷變化,...僅清除matplotlib的一部分圖

數據有兩種類型。

1)的輪廓線

self.axes.contour(x_scale_map,y_scale_map,matrix,cl,cmap=my_cmap,extent=0,matrix.shape[1]-1,0,matrix.shape[0]-1)) 

這是加載相對緩慢(〜1秒),但不經常改變。

2)在此輪廓的頂部,我繪製比如一些線路

self.axes.axhline(y,color='black') 

這些線都明顯立刻抽出,並在用戶點擊什麼功能經常改變。在這些情況下,先前繪製的線條需要消失,並且需要顯示新的線條,而等高線圖保持不變。

現在,我的問題如下。我還沒有找到一種方法去除線條而不是輪廓。以獲得所需結果的唯一途徑似乎是這樣做的:

self.axes.clear() 

,然後重新繪製兩個輪廓和新的生產線。但如前所述,每次重新加載輪廓都很慢,因此很煩人。

有沒有辦法只清除圖中的幾行? 我曾嘗試做一些像使用疊加的次要情節:

self.axes1 = self.fig.add_subplot(111) 
self.axes2 = self.fig.add_subplot(111) 
self.axes1.contour(...) 
self.axes2.axhline(y,color='black') 
self.axes2.clear() 

但最後一行清除整個身影。

有誰知道如何實現所需的功能? 謝謝

+0

您可以將線條變爲不可見並讀取軸線。 (對於任何matplotlib藝術家,你可以執行'artist.set_visible(False)'。)另外,如果你正在做一些可以更新現有行數據而不是添加新行並隱藏舊行的數據,應該只是更新舊的。有很多隱藏的藝術家最終會開始減緩情節的渲染速度。 –

+0

嗨@JoeKington,我沒有想過按照你提出的方式來解決問題。我一直在這個方向上搜索更多,並發現以下[問答](http://stackoverflow.com/questions/4981815/how-to-remove-lines-in-a-matplotlib-plot)。換句話說,我通過'artist.set_visible(True/False)'和'artist.remove()'與'del artist'一起獲得了我想要的所有東西。謝謝 – savantas

+0

@tcaswell - 完成並感謝 – savantas

回答

4

以下Q&A給出了這個問題的解決方案。

換言之,以能夠從該圖中刪除行:繪製時它

1)跟蹤線的通過存儲其參考:

my_line = self.axes.axhline(y,color='black') 

2)的去除是然後完成如下:

my_line.remove() 
del my_line 
1

我成功地解決了這個問題,通過使用self.axes2.cla()的等價物來清除指定的軸。在我的情況下,我必須使用sharex和sharey以及self.axes2.patch.set_aplha(0.0)來使facecolor透明,並看穿下面的圖。

雖然我現在的問題是我有一個在axes1圖上定義的選擇器,它似乎不會觸發上面的圖。