Maison > développement back-end > Tutoriel Python > Pourquoi mon tracé en temps réel Matplotlib ne se met-il pas à jour dans une boucle While ?

Pourquoi mon tracé en temps réel Matplotlib ne se met-il pas à jour dans une boucle While ?

DDD
Libérer: 2024-12-04 19:23:15
original
302 Les gens l'ont consulté

Why Doesn't My Matplotlib Real-Time Plot Update Inside a While Loop?

Traçage en temps réel dans une boucle While : un guide de dépannage

Lorsque vous essayez de créer des tracés en temps réel, il est essentiel de comprendre pourquoi les mises à jour du tracé peuvent ne pas se produire comme prévu pendant une boucle while. Dans ce cas spécifique, le problème se pose lors de la mise en œuvre du traçage en temps réel à l'aide de matplotlib pour visualiser les données récupérées d'une caméra dans OpenCV.

Pour isoler le problème, un exemple de code simplifié a été présenté :

fig = plt.figure()
plt.axis([0, 1000, 0, 1])

i = 0
x = list()
y = list()

while i < 1000:
    temp_y = np.random.random()
    x.append(i)
    y.append(temp_y)
    plt.scatter(i, temp_y)
    i += 1
    plt.show()
Copier après la connexion

Dans l'espoir de voir 1000 points tracés individuellement, le code n'affiche étonnamment que le premier point, puis attend que la boucle soit terminée avant de remplir le reste du graphique. Ce comportement est dû au fait que le comportement par défaut de matplotlib est d'attendre la fin du programme pour dessiner l'intégralité du graphique.

Pour surmonter cette limitation et réaliser un traçage en temps réel, l'extrait de code doit être modifié comme suit :

import numpy as np
import matplotlib.pyplot as plt

plt.axis([0, 10, 0, 1])

for i in range(10):
    y = np.random.random()
    plt.scatter(i, y)
    plt.pause(0.05)

plt.show()
Copier après la connexion

La principale différence ici est l'inclusion de plt.pause(0.05). Cette fonction suspend l'exécution du programme pendant 0,05 seconde, permettant à la fois au point de données d'être tracé et à la boucle d'événements de l'interface graphique de s'exécuter (rendant les interactions avec la souris possibles).

Avec cette modification, le tracé sera mis à jour dans en temps réel, montrant chaque point au fur et à mesure qu'il est ajouté à l'ensemble de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal