Es gibt Zeiten, in denen Sie die Werte von Sensoren überprüfen oder den Lernstatus des maschinellen Lernens in Echtzeit in einem Diagramm darstellen möchten. Ich möchte Python verwenden, da es eine praktische Bibliothek zur Erstellung von Diagrammen gibt, die "matplotlib" heißt.
Normalerweise beim Erstellen eines Diagramms mit matplotlib
import matplotlib.pyplot as plt
"""
Verarbeitung zur Berechnung der Daten, die Sie zeichnen möchten
...
"""
plt.plot(data)
plt.show()
Ich werde das machen. Wenn Sie jedoch "show ()" aufrufen, wird das Programm dort blockiert und Sie können nicht in Echtzeit zeichnen. Wenn Sie nachschlagen, verwenden Sie Artikel wie "draw ()" anstelle von "show ()" oder kombinieren Sie sie mit GUI-Bibliotheken wie "Tkinter (tkinter)" und "Qt". Wenn Sie in einer Windows-Umgebung das Diagramm einmal berühren, friert die GUI ein und Sie können sie nicht verwenden, obwohl sie nicht sehr gut ist. (Ich denke, es könnte in einer Unix-Umgebung wie Mac verwendet werden.)
Wie im Beispiel gab es einen damit verbundenen Austausch im Stapelüberlauf. Referenz: Echtzeit-Plotten in while-Schleife mit matplotlib
Die Schlussfolgerung ist, "plt.pause (Intervall)" anstelle von "plt.show ()" zu verwenden. Unten finden Sie ein Beispiel für die Darstellung einer einfachen Sündenfunktion für immer.
Ich habe Notizen in die Kommentare geschrieben, also lesen Sie sie bitte.
matplotlib_realtime_plot_example.py
# -*- coding: utf-8 -*-
"""
Beispiel für ein Echtzeit-Plotten mit Matplotlib
Zeichnen Sie die Sin-Funktion weiterhin auf unbestimmte Zeit
"""
from __future__ import unicode_literals, print_function
import numpy as np
import matplotlib.pyplot as plt
def pause_plot():
fig, ax = plt.subplots(1, 1)
x = np.arange(-np.pi, np.pi, 0.1)
y = np.sin(x)
#Muss zur Initialisierung einmal geplottet werden
#Zu diesem Zeitpunkt ist es erforderlich, das geplottete Objekt zu empfangen.
#Beachten Sie, dass die Liste zurückgegeben wird
lines, = ax.plot(x, y)
#Unendliche Handlung von hier
while True:
#Plotdaten aktualisieren
x += 0.1
y = np.sin(x)
#Wenn Sie beim Aktualisieren der Zeichnungsdaten die Plotfunktion verwenden
#Beachten Sie, dass das Linienobjekt jedes Mal vergrößert wird.
#
#Am einfachsten ist es für die oben empfangenen Zeilen
# set_data()So aktualisieren Sie Zeichnungsdaten mit einer Methode.
lines.set_data(x, y)
# set_data()Es scheint, dass die Achse bei Verwendung nicht automatisch eingestellt wird
#In diesem Beispiel verschwindet die Sinuskurve im Handumdrehen aus dem Zeichenbereich.
#Daher ist es erforderlich, den Bereich der x-Achse entsprechend zu ändern.
ax.set_xlim((x.min(), x.max()))
#Der beste Punkt
# - plt.show()Blockiert und kann nicht in Echtzeit dargestellt werden
# - plt.ion() + plt.draw()Kann nicht verwendet werden, da das Grafikfenster einfriert und das Programm stoppt
# ----> plt.pause(interval)Benutze das!!!Argument ist Schlafzeit
plt.pause(.01)
if __name__ == "__main__":
pause_plot()
Dies wird große Fortschritte machen !!!
Der oben erwähnte Stapelüberlauf beschreibt auch eine Methode, die ein Paket namens "Drawow" verwendet, also werde ich es vorstellen.
Da drawow
mit pip
eingegeben wird
$ pip install drawnow
OK.
matplotlib_drawnow_realtime_plot_example.py
# -*- coding: utf-8 -*-
"""
Beispiel für ein Echtzeit-Plotten mit Matplotlib
Zeichnen Sie die Sin-Funktion weiterhin auf unbestimmte Zeit
"""
from __future__ import unicode_literals, print_function
import numpy as np
import matplotlib.pyplot as plt
from drawnow import drawnow, figure
def drawnow_plot():
#Verwendung der im Zeichnungspaket enthaltenen Figurenfunktion
#Erstellen Sie ein Figurenobjekt
fig = figure()
x = np.arange(-np.pi, np.pi, .1)
y = np.sin(x)
def draw():
"""
Beschreiben Sie die Verarbeitung, die erforderlich ist, damit das Diagramm an die Zeichnungsfunktion übergeben wird
Die für die Darstellung erforderlichen Variablen sollten Variablen in dem Bereich sein, auf den diese Funktion zugreifen kann.
"""
plt.plot(x, y)
while True:
x += .1
y = np.sin(x)
drawnow(draw)
... Ich habe mir den Quellcode nach dem Schreiben angesehen, aber es scheint, dass drawow
am Ende draw ()
aufruft, und es hat nicht funktioniert, als ich es unter Windows gemacht habe (ein Phänomen, bei dem die GUI einfriert). ..
Wenn Sie in Echtzeit zeichnen möchten, verwenden Sie plt.pause ()
!!!
Recommended Posts