Mysql
 sql >> Database >  >> RDS >> Mysql

Come aggiornare un grafico usando matplotlib

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 usare df.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 a line.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 definire conn e c e query -- tutto ciò che non cambia con ogni chiamata a animate --fuori da animate e ripassali come argomenti a animate tramite i fargs parametro.