2013-10-04 72 views
2

所以我又回到了另一個愚蠢的問題。 考慮這段代碼matplotlib清除覆蓋分散圖像

x = linspace(-10,10,100); 
[X,Y]=meshgrid(x,x) 
g = np.exp(-(square(X)+square(Y))/2) 
plt.imshow(g) 
scat = plt.scatter(50,50,c='r',marker='+') 

有沒有辦法只清除圖形上的散點,但不清除所有的形象呢? 實際上,我正在編寫一個代碼,其中散點的外觀與Tkinter Checkbutton綁定,並且當我單擊/取消單擊該按鈕時,我希望它出現/消失。

感謝您的幫助!

回答

3

返回句柄plt.scatter有幾種方法,其中包括remove()。所以你需要做的就是打電話。隨着你的榜樣:

x = np.linspace(-10,10,100); 
[X,Y] = np.meshgrid(x,x) 
g = np.exp(-(np.square(X) + np.square(Y))/2) 
im_handle = plt.imshow(g) 
scat = plt.scatter(50,50,c='r', marker='+') 
# image, with scatter point overlayed 
scat.remove() 
plt.draw() 
# underlying image, no more scatter point(s) now shown 

# For completeness, can also remove the other way around: 
plt.clf() 
im_handle = plt.imshow(g) 
scat = plt.scatter(50,50,c='r', marker='+') 
# image with both components 
im_handle.remove() 
plt.draw() 
# now just the scatter points remain. 

(?幾乎)所有matplotlib繪製函數返回一個句柄,其中有一些方法來去除所呈現的項目。

請注意,您需要調用重繪看remove()的影響 - 從刪除幫助(我的重點):如果可能的話

從圖中刪除的藝術家。效果將不會是 ,直到該圖被重新繪製,例如 :meth:matplotlib.axes.Axes.draw_idle

+0

感謝您的回答。你在哪裏可以找到像這個特定功能存在的metods?在pyplot文檔上,我只找到參數,但不是方法... –

+1

好問題。在參數列表之後的[scatter docs](http://matplotlib.org/api/pyplot_api.html?highlight=scatter#matplotlib.pyplot.scatter)中,它還描述了返回類型。在這種情況下,它是一個'PathCollection',並通過鏈接顯示該類繼承自'Collection',然後'artist.Artist'和'cm.ScalarMappable'。其中每一種都增加了幾種方法,'Artist'類是提供'remove()'的。您還可以在與'dir(scat)'的交互式會話中找到更多信息。 – Bonlenfum

+0

@MathieuPaurisse另外請清楚繪製_functions_和他們返回的_objects_之間的區別。 – tacaswell