Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment mettre à jour un graphique à l'aide de matplotlib

La documentation est un peu légère sur l'explication de la façon d'utiliserFuncAnimation. Cependant, il existe des exemples dans la galerie et des tutoriels de blog, tels que de Jake Vanderplas et PDF de Sam Dolan .

Cet exemple du tutoriel de Jake Vanderplas est peut-être l'animation "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()

Modifiez diverses valeurs ou lignes de code et voyez ce qui se passe. Voyez ce qui se passe si vous modifiez return [line] à autre chose. Si vous étudiez et jouez avec ces exemples, vous pouvez apprendre comment les pièces s'emboîtent.

Une fois que vous avez compris cet exemple, vous devriez pouvoir le modifier pour l'adapter à votre objectif.

Si vous rencontrez des problèmes, publiez votre code et décrivez le message d'erreur ou le mauvais comportement que vous voyez.

Quelques conseils :

  • Puisque l'animation nécessite d'appeler line.set_data , je ne pense pas que vous puissiez utiliser df.plot() de Pandas . En fait, je ne sais pas si le Pandas DataFrame est utile ici. Vous feriez peut-être mieux d'aspirer les données dans des listes ou des tableaux NumPy et de les transmettre à line.set comme ci-dessus, sans impliquer les Pandas.

  • L'ouverture d'une connexion à la base de données ne doit se faire qu'une seule fois. animate se fait appeler plusieurs fois. Il est donc préférable de définir conn et c et query -- tout ce qui ne change pas à chaque appel à animate --en dehors de animate , et retransmettez-les en tant qu'arguments à animate via les fargs paramètre.