Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Matplotlib eine Echtzeitdarstellung von Daten innerhalb einer While-Schleife erreichen?
Echtzeitplotierung innerhalb einer While-Schleife
Beim Versuch, Daten aus einer Videoquelle in Echtzeit anzuzeigen, stoßen Benutzer häufig auf Schwierigkeiten Aktualisieren des Plots innerhalb einer While-Schleife. Ein typisches Problem besteht darin, dass der Plot statisch bleibt, bis die Schleife abgeschlossen ist. Dieses Problem ist auf die Methode zurückzuführen, die zum Anzeigen dynamischer Daten verwendet wird.
Im bereitgestellten Codeausschnitt:
while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show()
Die Schleife hängt Datenpunkte an, zeichnet einen einzelnen Punkt und ruft dann plt.show auf (). Allerdings blockiert plt.show() die GUI und verhindert, dass anderer Code ausgeführt wird, bis das Fenster manuell geschlossen wird, was zu verzögerten Aktualisierungen führt.
Um Echtzeit-Plots zu erreichen, ist es notwendig, plt.pause() zu verwenden . Hier ist eine überarbeitete Version:
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()
Die wichtigste Änderung ist das Hinzufügen von plt.pause(0.05) nach dem Zeichnen jedes Punkts. plt.pause() zeichnet die aktualisierten Daten und führt die Ereignisschleife der GUI aus. Das Argument 0,05 gibt eine Verzögerung von 50 Millisekunden an und gibt der GUI Zeit, den Punkt anzuzeigen und Benutzerinteraktionen (z. B. Schließen des Fensters) zu verarbeiten.
Dieser geänderte Code sollte sicherstellen, dass die Darstellung reibungslos in Echtzeit aktualisiert wird. Ermöglicht dem Benutzer die dynamische Visualisierung der Daten.
Das obige ist der detaillierte Inhalt vonWie kann ich in Matplotlib eine Echtzeitdarstellung von Daten innerhalb einer While-Schleife erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!