2013-07-26 41 views
0

比方說,我做了一系列的matplotlib AnnotationBbox'es通過一個for循環,像這樣:Matplotlib:刪除所有藝術家和線

for city in cities: 
    x, y = self.map(city[1], city[0]) 

    ab = AnnotationBbox(imagebox, [x,y], 
           xybox=(0, 0), 
           xycoords='data', 
           boxcoords="offset points", 
           frameon=False) 
      self.axes.add_artist(ab) 
      self.locationImages.append(ab) 

在這個例子中,我創建了一系列AnnotationBBoxes的,並將它們存儲在名爲self.locationImages的列表中。然後我經過self.locationImages在一個循環,並刪除每一個被這樣:

for image in self.locationImages: 
     image.remove() 

有沒有一種方法,以消除所有的藝術家,而不必經過一個循環?或者完全刪除所有藝術家和線條,而不必刪除軸或圖形?

我在地圖上繪製點,我需要地圖留下來。我正在進行縮放和放大,但在放大和縮小時,我需要刪除所有內容並重新繪製。我有一個大的數據集工作,做迭代是一個昂貴的行動

+0

使用'set_visible'可能比刪除藝術家更好。 http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_visible你仍然必須觸發重畫,但你不必設置和拆除藝術家。 – tacaswell

回答

0

從matplotlib的pyplot接口,可以pyplot.cla()清除整個軸和pyplot.clf()清除整個數字。

+0

這些是'axis'和'figure'級別函數 - >'ax.cla()'和'fig.clf()',但是它們會刪除所有內容,包括OP要保留的地圖。 – tacaswell

+0

@tcaswell哎呀。不知道我錯過了那個! –