animação de artista de matplotlib: título ou texto que não muda

Eu tentei usar ArtistAnimation de matplotlib. O texto e os títulos da figura devem mudar em cada quadro, mas não mudam. Li muitos posts sobre problemas semelhantes, mas ainda não entendi qual é a solução. As demonstrações não mostram os títulos de atualização, tanto quanto eu pude encontrar.

Se alguém aí sabe, eu ficaria grato!

import matplotlib.pyplot as plt import numpy as np import matplotlib.animation as animation fig =plt.figure() ims=[] for iternum in range(4): plt.title(iternum) plt.text(iternum,iternum,iternum) ims.append([plt.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+' )]) #plt.cla() ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False, repeat_delay=2000) plt.show() 

Para animar artistas, você deve retornar uma referência para cada artista em seu array ims[] , incluindo os objects Text .

No entanto, não funciona para o título , não sei porquê. Talvez alguém com uma melhor compreensão dos mecanismos envolvidos possa nos esclarecer.

No entanto, o título é apenas um object Text , então podemos produzir o efeito desejado usando:

 fig = plt.figure() ims=[] for iternum in range(4): ttl = plt.text(0.5, 1.01, iternum, horizontalalignment='center', verticalalignment='bottom', transform=ax.transAxes) txt = plt.text(iternum,iternum,iternum) ims.append([plt.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+' ), ttl, txt]) #plt.cla() ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False, repeat_delay=2000) 

insira a descrição da imagem aqui

Você precisa fornecer os artistas para animar como uma lista de seqüências para o ArtistAnimation . No código da questão você só fornece o scatter, mas não o texto e o título.
Infelizmente, o título também faz parte dos eixos e, portanto, não será alterado, mesmo que seja fornecido. Então você pode usar um texto normal em seu lugar.

 import matplotlib.pyplot as plt import numpy as np import matplotlib.animation as animation fig, ax = plt.subplots() ims=[] for iternum in range(4): title = plt.text(0.5,1.01,iternum, ha="center",va="bottom",color=np.random.rand(3), transform=ax.transAxes, fontsize="large") text = ax.text(iternum,iternum,iternum) scatter = ax.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+') ims.append([text,scatter,title,]) ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False, repeat_delay=2000) plt.show() 

Você pode considerar o uso FuncAnimation vez de ArtistAnimation . Isso permitiria mudar o título facilmente.

 import matplotlib.pyplot as plt import numpy as np import matplotlib.animation as animation fig, ax = plt.subplots() ims=[] text = ax.text(0,0,0) scatter = ax.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+') def update(iternum): plt.title(iternum) text.set_position((iternum, iternum)) text.set_text(str(iternum)) scatter.set_offsets(np.random.randint(0,10,(5,2))) ani = animation.FuncAnimation(fig, update, frames=4, interval=500, blit=False, repeat_delay=2000) plt.show()