在保留绘图matplotlib的同时删除注释

bjo*_*asm 4 python matplotlib

我正在制作一系列散点图,其中我保留了每个绘图之间的大部分绘图(除了散点图).这样做是这样的:在matplotlib中的地块之间保持地图叠加

现在我想在情节中添加注释:

for j in range(len(n)):
   plt.annotate(n[j], xy = (x[j],y[j]), color = "#ecf0f1", fontsize = 4)
Run Code Online (Sandbox Code Playgroud)

但是,此注释保留在图之间的图上.如何在保存每个图形后清除注释?

Imp*_*est 11

您可以使用删除艺术家remove().

ann = plt.annotate (...)
ann.remove()
Run Code Online (Sandbox Code Playgroud)

删除后,可能需要重绘画布.


这是一个完整的示例,删除动画中的几个注释:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)
f = lambda x: np.sin(x)
line, = ax.plot(x, f(x))

scat = plt.scatter([], [],  s=20, alpha=1, color="purple", edgecolors='none')
ann_list = []

def animate(j):
    for i, a in enumerate(ann_list):
        a.remove()
    ann_list[:] = []

    n = np.random.rand(5)*6
    scat.set_offsets([(r, f(r)) for r in n])
    for j in range(len(n)):
        ann = plt.annotate("{:.2f}".format(n[j]), xy = (n[j],f(n[j])), color = "purple", fontsize = 12)
        ann_list.append(ann)

ani = matplotlib.animation.FuncAnimation(fig, animate, frames=20, interval=360)
ani.save(__file__+".gif",writer='imagemagick', fps=3)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 除了 `.remove()` 你也可以使用 `.set_position((x, y))` 来移动注解。 (2认同)