2

假设我通过 for 循环在 matplotlib 中制作了一系列 AnnotationBbox,如下所示:

 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)

在本例中,我创建了一系列 AnnotationBBox,并将它们存储在名为 self.locationImages 的列表中。然后我在一个循环中遍历 self.locationImages,并通过这样做删除每个:

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

有没有办法删除所有艺术家,而不必经历一个循环?或者完全删除所有艺术家和线条,而无需删除轴或图形?

我在地图上绘制点,我需要地图留下来。我正在放大和缩小,但在放大和缩小期间,我需要删除所有内容并重新绘制。我正在处理一个大型数据集,并且进行迭代是一项昂贵的操作

4

2 回答 2

1

我相信一个非常讨厌的解决方案是执行以下操作:

# remove all artists
while ax.artists != []:
  ax.artists[0].remove()

#remove all lines
while ax.lines != []:
  ax.lines[0].remove()

这适用于动态图(例如动画或ipywidgets)。但是,如果您说必须有更好的方法-我绝对同意:)

于 2021-03-08T02:48:11.877 回答
-1

在 matplotlib 的pyplot界面中,您可以pyplot.cla()清除整个轴和pyplot.clf()清除整个图形。

于 2013-07-26T19:11:35.747 回答