Então, estou tentando criar um enredo animado, mas quero que o quadro anterior seja limpo antes que um novo apareça. O que continuo recebendo são todos os quadros ao mesmo tempo ou apenas um enredo em branco.
fig, ax = plt.subplots()
campo = ax.plot(x2[0], phiSol[0])[0]
def init():
campo.set_data([],[])
return campo
def update(frame):
campo.set_xdata(x2[:frame])
campo.set_ydata(phiSol[:frame])
return campo
anima = ani.FuncAnimation(fig=fig, func=update, init_func=init, frames=40, interval=30)
HTML(anima.to_jshtml())
Tentei construir um init_func, mas nenhuma das minhas tentativas funcionou. A última tentativa é aquela no código acima. Como eu poderia fazer isso?
É o seu fatiamento que está causando o problema. com
:frame
você está fatiando para cimaframe
em vez de apenas pegar o quadro que você quer. Você pode ter copiado um exemplo com um ponto móvel que traça uma linha .Acabei de tentar isso e funcionou como você descreveu.
Sem os limites do eixo, o meu estava me mostrando uma janela vazia, então você pode tentar remover isso e ver como fica, e adicionar algo similar se tiver problemas. Adicionei algumas opções para torná-lo um pouco melhor (
campo,
) para recuperar apenas a primeira coisa retornada porax.plot
em vez de uma lista de objetos, eblit=True
que pode otimizar a criação da animação se ela ficar lenta (veja a documentação do FuncAnimation ).