[PYTHON] Echtzeitzeichnung mit Matplotlib

Motivation

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.

Bekannte Probleme

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.)

Verwenden wir pause () !!!

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

Bonus

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.

Wie benutzt man

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). ..

Fazit

Wenn Sie in Echtzeit zeichnen möchten, verwenden Sie plt.pause () !!!

Recommended Posts

Echtzeitzeichnung mit Matplotlib
Diagrammzeichnungsmethode mit matplotlib
Animation mit matplotlib
Japanisch mit Matplotlib
Animation mit matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib
Versuchen Sie, mit matplotlib eine Normalverteilung zu zeichnen
2-Achsen-Plot mit Matplotlib
Zeichentipps mit matplotlib auf der Serverseite
Diagrammzeichnung mit matplotlib
Heatmap von Python + matplotlib
Lernen Sie mit Chemo Informatics Matplotlib
Zeichnen mit Python Tinker
Grafikzeichnung mit Jupyter (Ipython-Notizbuch) + Matplotlib + Vagabund
Verschiedene Farbleisten mit Matplotlib
3D-Plot mit Matplotlib
Stellen Sie die Achsen mit matplotlib ein
[Python] Passen Sie Colormap an, wenn Sie Diagramme mit matplotlib zeichnen
(Für diejenigen, die mit Matplotlib nicht vertraut sind) Tipps zum Zeichnen von Diagrammen mit Seaborn
Zeichnen Sie Excel-Daten mit matplotlib (1)
Versuchen Sie es mit matplotlib mit PyCharm
Zeichnen Sie Excel-Daten mit matplotlib (2)
Echtzeit-Kantenerkennung mit OpenCV
Stapelbares Barplot mit Matplotlib
Echtzeit-Diagrammanzeige von matplotlib
Echtzeit-Web mit Django-Kanälen
Wählen Sie mit matplotlib abgestufte Farben aus
Animieren Sie mehrere Diagramme mit matplotlib
Diagrammzeichnung mit IPython Notebook
Erste Schritte mit dem Zeichnen mit matplotlib: Erstellen von Diagrammen aus Datendateien
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Python-Grafikhandbuch mit Matplotlib.
Japanisieren Sie Matplotlib mit Alpine mit Docker
Zeichnen Sie mit matplotlib ein loses Diagramm
Vielseitige Datenerfassung mit Pandas + Matplotlib
Heatmap mit Dendrogramm in Python + Matplotlib
3D-Zeichnung mit SceneKit in Pythonista
Einfache japanische Schrifteinstellung mit matplotlib
Zeichnen Sie einfach Diagramme mit matplotlib
Kontinuierliche Farbe mit Matplotlib-Streudiagramm
Zeichne Riapnov Fractal mit Python, matplotlib
Wenn matplotlib nicht mit python2.7 funktioniert
Führen Sie mit Python, matplotlib, einen logarithmischen Normalwahrscheinlichkeitsplot durch
Einfache Animation mit matplotlib (mp4, gif)
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Implementieren Sie "Data Visualization Design # 2" mit matplotlib
Wie man mit matplotlib mehrere Figuren betitelt
Passen Sie den Abstand zwischen den Figuren mit Matplotlib an
Richten Sie die Größe der Farbleiste an der Matplotlib aus
[Python] Zeichnen eines Wirbelmusters mit einer Schildkröte
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Machen Sie ein Zeichnungsquiz mit kivy + PyTorch
Schreiben Sie SVG-Diagramme mit Matplotlib mit Heroku
Heat Map für die Rastersuche mit Matplotlib
Stellen Sie die Farbe der xticklabels individuell mit matplotlib ein
Zeichnen Sie eine hierarchische Achsenbeschriftung mit matplotlib + pandas
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen