假设我通过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)
在这个例子中,我创建了一系列AnnotationBBoxes,并将它们存储在名为self.locationImages的列表中。然后我在循环中浏览self.locationImages,并通过执行以下操作删除每个:
for image in self.locationImages:
image.remove()
有没有办法删除所有的艺术家,而不必经历一个循环?或者完全删除所有艺术家和线条,而不必移除轴或图形?
我在地图上绘制点,我需要留下地图。我正在进行放大和缩小,但在放大和缩小期间,我需要删除所有内容并重新绘制。我正在使用大型数据集并进行迭代是一项昂贵的操作
答案 0 :(得分:0)
从matplotlib的pyplot
界面,您可以pyplot.cla()
清除整个轴,pyplot.clf()
清除整个图形。
答案 1 :(得分:0)
我认为一个非常讨厌的解决方案是执行以下操作:
# remove all artists
while ax.artists != []:
ax.artists[0].remove()
#remove all lines
while ax.lines != []:
ax.lines[0].remove()
这适用于动态绘图(例如动画或 ipywidgets
)。但如果你说必须有更好的方法——我绝对同意:)