Matplotlib, une puissante librairie Python pour la visualisation de données, excelle dans la création de graphiques statiques. Cependant, ses capacités s’étendent également aux visualisations en temps réel. Cet article explore les techniques de création de graphiques dynamiques et mis à jour à l’aide de Matplotlib, en mettant l’accent sur l’efficacité et les meilleures pratiques.
Table des matières :
FuncAnimation()
: Une approche simplifiée- Manipulation directe du canevas :
canvas.draw()
etcanvas.flush_events()
- Nuages de points en temps réel
- Optimisation des performances pour les données haute fréquence
FuncAnimation()
: Une approche simplifiée
FuncAnimation
de Matplotlib simplifie la création d’animations. Il appelle à plusieurs reprises une fonction pour mettre à jour le graphique, créant l’illusion de données en temps réel. Ceci est idéal pour les animations modérément complexes.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import random
fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
def animate(i):
xdata.append(i)
ydata.append(random.randint(0, 10))
line.set_data(xdata, ydata)
return line,
ani = animation.FuncAnimation(fig, animate, frames=100, interval=20, blit=True)
plt.show()
Ceci crée un graphique linéaire. FuncAnimation
appelle animate
à plusieurs reprises. animate
ajoute des données, met à jour la ligne à l’aide de line.set_data()
et renvoie l’artiste mis à jour. blit=True
optimise le redessin. interval
contrôle la fréquence de mise à jour (en millisecondes).
Manipulation directe du canevas : canvas.draw()
et canvas.flush_events()
Pour un contrôle plus précis, notamment avec des mises à jour haute fréquence où FuncAnimation
pourrait être inefficace, manipulez directement le canevas à l’aide de canvas.draw()
et canvas.flush_events()
. Cela offre plus de contrôle mais nécessite une compréhension plus approfondie des mécanismes internes de Matplotlib.
import matplotlib.pyplot as plt
import time
import random
fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
for i in range(100):
xdata.append(i)
ydata.append(random.randint(0, 10))
line.set_data(xdata, ydata)
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.02)
plt.show()
Cela donne le même résultat, mais appelle directement canvas.draw()
et canvas.flush_events()
. canvas.flush_events()
empêche les blocages de l’interface graphique. Cette méthode est gourmande en ressources mais offre une grande flexibilité.
Nuages de points en temps réel
La création de nuages de points en temps réel est similaire. Remplacez ax.plot()
par ax.scatter()
et mettez à jour les données du nuage de points.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import random
fig, ax = plt.subplots()
scatter, = ax.plot([], [], 'ro') # Utiliser un nuage de points
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
def animate(i):
xdata.append(random.randint(0, 10))
ydata.append(random.randint(0, 10))
scatter.set_data(xdata, ydata)
return scatter,
ani = animation.FuncAnimation(fig, animate, frames=100, interval=20, blit=True)
plt.show()
Cet exemple utilise FuncAnimation
pour un nuage de points. Ajustez interval
et frames
selon les besoins. Vous pouvez utiliser canvas.draw()
/canvas.flush_events()
pour plus de contrôle.
Optimisation des performances pour les données haute fréquence
Pour les données à très haute fréquence, considérez ces optimisations :
- Réduire la fréquence de mise à jour : Ne mettez à jour le graphique que lorsque cela est nécessaire.
- Limiter les points de données : Conservez une fenêtre glissante des points de données récents.
- Utiliser le blitting : (
blit=True
) Cela améliore considérablement les performances en ne redessinant que les parties modifiées. - Explorer des librairies alternatives : Pour les données à très haute fréquence, envisagez des librairies comme Pyqtgraph ou Bokeh, optimisées pour les performances.
Ces techniques fournissent une base solide pour créer des visualisations en temps réel dans Matplotlib. N’oubliez pas de les adapter en fonction de vos besoins spécifiques et des caractéristiques de vos données.