2017-02-18 3 views
0

Я создаю серию диаграмм рассеяния, где я сохраняю большую часть сюжета (помимо графика разброса) между каждым сюжетом. Это делается так: Keeping map overlay between plots in matplotlibУдалить аннотацию при сохранении графика matplotlib

Теперь я хочу, чтобы добавить аннотацию к сюжету:

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

Однако это аннотации остается на участке между участками. Как очистить аннотацию после сохранения каждой фигуры?

ответ

4

Вы можете удалить исполнителя, используя remove().

ann = plt.annotate (...) 
ann.remove() 

После удаления может потребоваться перерисовать холст.


Вот полный пример, убрав несколько аннотаций в анимации:

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() 

enter image description here

+0

Спасибо. Однако у меня есть ошибка: Ошибка: ValueError: list.remove (x): x not in list – bjornasm

+1

Эта ошибка, безусловно, происходит из-за того, что вы использовали функциональность 'artist.remove'. Поскольку я не знаю вашего точного кода, я добавил рабочий пример, как вы могли это сделать. – ImportanceOfBeingErnest

+0

Вы правы. Проблема возникает, когда художник не удаляется. – bjornasm

Смежные вопросы