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()
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()
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!