Erstellen animierter Plots mit Matplotlib

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Matplotlib ist eine Datenvisualisierungsbibliothek, die verwendet wird, um statische, animierte und interaktive Visualisierungen in Python zu erstellen. In diesem Lab werden wir lernen, wie man mithilfe von Matplotlib einen animierten Graphen erstellt. Wir werden die FuncAnimation-Klasse verwenden, um eine Animation einer abnehmenden Sinuswelle zu erstellen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback ab, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

Zunächst müssen wir die erforderlichen Bibliotheken importieren. In diesem Lab werden wir Matplotlib und NumPy verwenden.

import itertools

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.animation as animation

Die Datengenerierungsfunktion erstellen

Als nächstes müssen wir eine Funktion erstellen, die die Daten für die Animation generiert. Die Funktion wird eine Sinuswelle erzeugen, die im Laufe der Zeit abnimmt. Wir werden die itertools.count()-Funktion verwenden, um eine unendliche Zahlenfolge zu generieren. Wir werden diese Zahlen verwenden, um die Werte der Sinuswelle zu berechnen.

def data_gen():
    for cnt in itertools.count():
        t = cnt / 10
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)

Das Diagramm einrichten

Jetzt müssen wir das Diagramm einrichten. Wir werden eine Figur und ein Achsenobjekt mithilfe der subplots()-Funktion von Matplotlib erstellen. Wir werden auch ein Linienobjekt erstellen, um die Sinuswelle darzustellen.

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []

Die Initialisierungsfunktion definieren

Wir müssen eine Initialisierungsfunktion definieren, die den Anfangszustand des Diagramms festlegt. In dieser Funktion werden wir die Y-Achsengrenzen festlegen und die Daten aus dem Linienobjekt löschen.

def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 1)
    del xdata[:]
    del ydata[:]
    line.set_data(xdata, ydata)
    return line,

Die Animationsfunktion definieren

Jetzt müssen wir die Funktion definieren, die das Diagramm für jedes Frame der Animation aktualisiert. Diese Funktion wird die von der data_gen()-Funktion generierten Daten entgegennehmen und das Diagramm mit den neuen Daten aktualisieren. Wir werden auch die X-Achsengrenzen aktualisieren, während die Animation abläuft.

def run(data):
    ## update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()

    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    line.set_data(xdata, ydata)

    return line,

Die Animation erstellen

Schließlich können wir die Animation mithilfe der FuncAnimation-Klasse erstellen. Wir werden die Parameter fig, run, data_gen, init_func und interval übergeben, um die Animation zu erstellen. Wir werden auch den Parameter save_count auf 100 setzen, um sicherzustellen, dass nur die letzten 100 Frames gespeichert werden.

ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
                              save_count=100)

Zeige das Diagramm an

Wir können jetzt das Diagramm mit der show()-Funktion von Matplotlib anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mit Matplotlib einen animierten Plot erstellt. Wir haben die FuncAnimation-Klasse verwendet, um eine Animation einer abklingenden Sinuswelle zu erstellen. Wir haben auch gelernt, wie man einen Plot einrichtet, eine Datengeneratorfunktion definiert, eine Initialisierungsfunktion definiert, eine Animationsfunktion definiert und die Animation erstellt.