La documentazione è un po' chiara sulla spiegazione di come utilizzareFuncAnimation. Tuttavia, ci sono esempi nella galleria e blogtutorial, come di Jake Vanderplas e PDF di Sam Dolan .
Questo esempio del tutorial di Jake Vanderplas è forse l'animazione "Hello World" dell'animazione 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()
Modifica vari valori o righe di codice e guarda cosa succede. Guarda cosa succede se modifichi return [line]
a qualcos'altro. Se studi e giochi con questi esempi, puoi imparare come i pezzi si incastrano.
Una volta compreso questo esempio, dovresti essere in grado di modificarlo per adattarlo al tuo obiettivo.
Se hai problemi, pubblica il tuo codice e descrivi quale messaggio di errore o comportamento scorretto vedi.
Alcuni consigli:
-
Poiché l'animazione richiede la chiamata a
line.set_data
, non penso che tu possa usaredf.plot()
di Pandas . In effetti, non sono sicuro che Pandas DataFrame sia utile qui. Potrebbe essere meglio risucchiare i dati in elenchi o array NumPy e passarli aline.set
come sopra, senza coinvolgere i Panda. -
L'apertura di una connessione al database deve essere eseguita una volta.
animate
viene chiamato molte volte. Quindi è meglio definireconn
ec
equery
-- tutto ciò che non cambia con ogni chiamata aanimate
--fuori daanimate
e ripassali come argomenti aanimate
tramite ifargs
parametro.