Data Visualization

Visualisation de données en temps réel avec Matplotlib

Spread the love

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

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *