2013-07-26 37 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哎呀。不知道我错过了那个! –