Einführung
Dieser schrittweise Lab zeigt, wie man mit Matplotlib in Python eine Animation mit mehreren Teilplots erstellt. Das Beispiel zeigt, wie man einen Kreis und eine Sinuskurve in zwei verschiedenen Teilplots animiert.
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 nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der 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
Der erste Schritt besteht darin, die erforderlichen Bibliotheken zu importieren, einschließlich Matplotlib, NumPy und des Animationsmoduls von Matplotlib.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch
Figur und Teilplots erstellen
Der zweite Schritt besteht darin, die Figur und die Teilplots zu erstellen, die für die Animation verwendet werden sollen. In diesem Beispiel erstellen wir zwei nebeneinander liegende Teilplots mit unterschiedlichen Seitenverhältnissen. Der linke Teilplot ist ein Einingelkreis, und der rechte Teilplot ist ein leerer Plot, der zur Animation einer Sinuskurve verwendet werden soll.
fig, (axl, axr) = plt.subplots(
ncols=2,
sharey=True,
figsize=(6, 2),
gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])
Kreis und Startpunkt zeichnen
Der dritte Schritt besteht darin, den Kreis und den Startpunkt auf dem linken Teilplot zu zeichnen. Wir erstellen ein Array von Winkeln, um den Kreis zu generieren, und plotten dann die Sinus- und Kosinuswerte jedes Winkels. Wir plotten auch einen einzelnen Punkt am Ursprung.
x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")
Sinuskurve zeichnen
Der vierte Schritt besteht darin, die Sinuskurve auf dem rechten Teilplot zu zeichnen. Wir erstellen ein Array von Winkeln und plotten dann den Sinuswert jedes Winkels. Wir speichern auch das sine-Plot-Objekt, das wir später in der Animation aktualisieren werden.
sine, = axr.plot(x, np.sin(x))
Verbindunglinie zeichnen
Der fünfte Schritt besteht darin, eine gestrichelte Linie zu zeichnen, die die beiden Teilplots verbindet. Wir erstellen ein ConnectionPatch-Objekt, das den Ursprung des linken Teilplots mit der rechten Kante des rechten Teilplots verbindet. Wir speichern auch das con-Patch-Objekt, das wir später in der Animation aktualisieren werden.
con = ConnectionPatch(
(1, 0),
(0, 0),
"data",
"data",
axesA=axl,
axesB=axr,
color="C0",
ls="dotted",
)
fig.add_artist(con)
Die Animationsfunktion definieren
Der sechste Schritt besteht darin, die Animationsfunktion zu definieren. Diese Funktion wird für jedes Frame der Animation aufgerufen und aktualisiert die Position des Punktes auf dem linken Teilplot, die Position und die Daten der Sinuskurve auf dem rechten Teilplot sowie die Position des Verbindungspatches.
def animate(i):
x = np.linspace(0, i, int(i * 25 / np.pi))
sine.set_data(x, np.sin(x))
x, y = np.cos(i), np.sin(i)
point.set_data([x], [y])
con.xy1 = x, y
con.xy2 = i, y
return point, sine, con
Die Animation erstellen
Der siebte Schritt besteht darin, das Animationsobjekt mit der FuncAnimation-Funktion zu erstellen. Wir übergeben das Figure-Objekt, die Animationsfunktion, den Zeitintervall zwischen den Frames in Millisekunden, die Anzahl der Frames und eine Verzögerung vor dem Wiederholen der Animation.
ani = animation.FuncAnimation(
fig,
animate,
interval=50,
blit=False, ## blitting kann nicht mit Figure-Künstlern verwendet werden
frames=x,
repeat_delay=100,
)
Die Animation anzeigen
Der letzte Schritt besteht darin, die Animation mit der show-Funktion des pyplot-Moduls anzuzeigen.
plt.show()
Zusammenfassung
Dieser schrittweise Lab zeigt, wie man mit Matplotlib in Python eine Animation mit mehreren Teilplots erstellt. Das Beispiel zeigt, wie man einen Kreis und eine Sinuskurve über zwei verschiedene Teilplots animiert. Die Schritte umfassten das Importieren von Bibliotheken, das Erstellen der Figur und der Teilplots, das Zeichnen des Kreises und des Anfangspunktes, das Zeichnen der Sinuskurve, das Zeichnen der Verbindunglinie, die Definition der Animationsfunktion, das Erstellen des Animationsobjekts und das Anzeigen der Animation.