La documentación es un poco ligera en la explicación de cómo usar FuncAnimation. Sin embargo, hay ejemplos en la galería y blogtutoriales, como Jake Vanderplas's y PDF de Sam Dolan .
Este ejemplo del tutorial de Jake Vanderplas es quizás la animación "Hello World" de matplotlib:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def init():
return [line]
def animate(i, ax, line):
x = np.linspace(0, 2*np.pi, N) + i/(N*2)
ax.set_xlim(x.min(), x.max())
line.set_data(x, np.sin(x))
return [line]
N = 100
fig, ax = plt.subplots()
line, = ax.plot([], [])
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
ani = animation.FuncAnimation(
fig, animate, init_func=init, interval=0, frames=int(4*np.pi*N),
repeat=True, blit=True, fargs=[ax, line])
plt.show()
Cambie varios valores o líneas de código y vea qué sucede. Vea lo que sucede si cambia return [line]
a otra cosa Si estudias y juegas con estos ejemplos, puedes aprender cómo encajan las piezas.
Una vez que comprenda este ejemplo, debería poder modificarlo para que se ajuste a su objetivo.
Si tiene problemas, publique su código y describa qué mensaje de error o mal comportamiento ve.
Algunos consejos:
-
Dado que la animación requiere llamar a
line.set_data
, no creo que puedas usardf.plot()
de Pandas . De hecho, no estoy seguro de si Pandas DataFrame es útil aquí. Puede que sea mejor absorber los datos en listas o arreglos NumPy y pasarlos aline.set
como arriba, sin involucrar a los Pandas. -
La apertura de una conexión a la base de datos debe hacerse una vez.
animate
lo llaman muchas veces. Entonces es mejor definirconn
yc
yquery
-- cualquier cosa que no cambie con cada llamada aanimate
--fuera deanimate
, y pásalos como argumentos aanimate
a través de losfargs
parámetro.