Skip to content

Matplotlib-Animations-Tutorial – Erstellen Sie atemberaubende Visualisierungen

Updated on

Datenvisualisierung ist ein mächtiges Werkzeug in den Händen derjenigen, die wissen, wie man es benutzt. Es kann komplexe Datensätze in verständliche Erkenntnisse umwandeln, und mit Hilfe von Animationen können diese Erkenntnisse noch fesselnder dargestellt werden. Hier kommt Matplotlib, eine vielseitige Bibliothek in Python, ins Spiel. Mit Matplotlib können wir statische, animierte und interaktive Visualisierungen in Python erstellen, was es zu einem unverzichtbaren Tool für jeden Datenwissenschaftler oder Analysten macht.

In diesem Tutorial werden wir uns auf die Animationsfähigkeiten von Matplotlib konzentrieren. Wir werden erkunden, wie man Animationen erstellt, welche Arten von Plots animiert werden können und in welchen Formaten man Animationen speichern kann. Wir werden uns auch mit einigen häufigen Problemen befassen, mit denen Benutzer konfrontiert sind, z.B. Animationen, die in Jupyter-Notebooks nicht funktionieren, und Lösungen für diese Probleme anbieten. Egal, ob Sie ein erfahrener Datenwissenschaftler oder ein Anfänger sind, der gerade erst anfängt, dieses Tutorial hat etwas für Sie.

Möchten Sie schnell Data-Visualisierungen aus einem Python-Pandas-DataFrame erstellen, ohne Code schreiben zu müssen?

PyGWalker ist eine Python-Bibliothek für explorative Datenanalyse mit Visualisierung. PyGWalker (opens in a new tab) kann Ihren Workflow zur Datenanalyse und Datenvisualisierung in Jupyter Notebook vereinfachen, indem es Ihren Pandas-DataFrame (und Polars-DataFrame) in eine Tableau-ähnliche Benutzeroberfläche für die visuelle Exploration umwandelt.

PyGWalker zur Datenvisualisierung (opens in a new tab)

Was ist Matplotlib-Animation?

Matplotlib-Animation ist ein Feature der Matplotlib-Bibliothek, mit dem dynamische Visualisierungen erstellt werden können. Im Gegensatz zu statischen Plots können Animationen Änderungen im Laufe der Zeit anzeigen, was sie zu einem hervorragenden Werkzeug zur Darstellung von Zeitreihendaten macht. Beispielsweise können Aktienkurse im Laufe der Jahre, Klimaveränderungen in den letzten zehn Jahren oder jedes Phänomen, das sich im Laufe der Zeit ändert, effektiv mit Animationen demonstriert werden.

Das Animationsmodul in Matplotlib besteht aus mehreren Klassen, die ein Rahmenwerk für die Erstellung von Animationen bereitstellen. Die wichtigste davon ist die Klasse FuncAnimation, mit der Animationen erstellt werden, indem eine Funktion wiederholt aufgerufen wird (daher der Name FuncAnimation). Diese Klasse erleichtert die Erstellung von Animationen, bei denen der Zustand (oder die Daten) des Plots in jedem Frame aktualisiert wird.

Erstellen einer Animation mit Matplotlib

Die Erstellung einer Animation in Matplotlib umfasst einige Schritte. Zunächst müssen Sie das Diagramm und die Achse des Plots einrichten. Dann definieren Sie die Animationsfunktion, die die Daten in jedem Frame aktualisiert. Schließlich erstellen Sie eine Instanz der Klasse FuncAnimation, indem Sie das Diagramm, die Animationsfunktion und die Anzahl der Frames als Argumente übergeben.

Hier ein einfaches Beispiel zur Erstellung einer Liniendiagramm-Animation:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
# Diagramm und Achse erstellen
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'r-')
 
def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,
 
def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,
 
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

In diesem Beispiel legt die Funktion init die Diagrammgrenzen fest und gibt das Linienobjekt (ln) zurück. Die Funktion update wird für jeden Frame aufgerufen, wobei sie die neuen Daten (den Sinus der Frame-Nummer) an ydata anhängt und die Daten des Linienobjekts aktualisiert. Die Klasse FuncAnimation wird dann verwendet, um die Animation zu erstellen.

Arten von Plots, die mit Matplotlib animiert werden können

Matplotlib ist sehr vielseitig und ermöglicht die Animation einer Vielzahl von Diagrammtypen. Hier sind einige Beispiele:

  1. Liniendiagramme: Wie wir im vorherigen Abschnitt gesehen haben, können Liniendiagramme animiert werden, um die Veränderungen einer oder mehrerer Größen im Laufe der Zeit anzuzeigen. Dies ist besonders nützlich für Zeitreihendaten.

  2. Punktdiagramme: Punktdiagramme können animiert werden, um die Bewegung von Punkten in einem 2D-Raum darzustellen. Dies kann verwendet werden, um Clustering oder Klassifizierung von Datenpunkten im Laufe der Zeit zu visualisieren.

  3. Balkendiagramme: Balkendiagramme können animiert werden, um die Änderung der durch die Höhe der Balken dargestellten Größe anzuzeigen. Dies kann verwendet werden, um Änderungen in einem Datensatz im Laufe der Zeit zu visualisieren.

  4. Histogramme: Histogramme können animiert werden, um die Änderung der Verteilung eines Datensatzes im Laufe der Zeit anzuzeigen.

  5. 3D-Diagramme: Matplotlib unterstützt auch 3D-Diagramme. Sie können 3D-Diagramme animieren, um Veränderungen in einem 3D-Datensatz darzustellen. Dies kann nützlich sein, um 3D-wissenschaftliche Daten zu visualisieren.

  6. Unterdiagramme: Sie können mehrere Unterdiagramme gleichzeitig animieren. Dies kann verwendet werden, um verschiedene Datensätze oder verschiedene Ansichten desselben Datensatzes zu vergleichen.

Denken Sie daran, dass der Typ des Diagramms, das Sie animieren möchten, von der Art Ihrer Daten und dem, was Sie mit Ihrer Visualisierung aussagen möchten, abhängt.

Speichern Ihrer Matplotlib-Animation

Sobald Sie Ihre Animation erstellt haben, möchten Sie sie möglicherweise für zukünftige Verwendung oder zum Teilen mit anderen speichern. Matplotlib stellt die Methode Animation.save für diesen Zweck zur Verfügung. Mit dieser Methode können Sie die Animation in verschiedenen Formaten wie MP4, AVI und HTML5-Video speichern.

Hier ein Beispiel, wie Sie eine Animation speichern können:

ani.save('animation.mp4', writer='ffmpeg', fps=30)

In diesem Beispiel wird die Animation als MP4-Datei mit dem FFmpeg-Writer gespeichert. Der Parameter fps legt die Anzahl der Frames pro Sekunde in der gespeicherten Animation fest.

Es ist wichtig zu beachten, dass zum Speichern von Animationen ein geeigneter Writer auf Ihrem System installiert sein muss. Für die meisten gängigen Formate verwendet Matplotlib automatisch den entsprechenden Writer. Für einige Formate müssen jedoch möglicherweise zusätzliche Software installiert werden. So erfordert das Speichern von Animationen als MP4-Dateien, dass FFmpeg auf Ihrem System installiert ist.

Im nächsten Teil dieses Tutorials werden wir genauer auf die verschiedenen Arten von Plots eingehen, die Sie mit Matplotlib animieren können, und für jede Art Beispiele geben. Wir werden auch besprechen, wie man 3D-Plots animiert, wie man eine Fortschrittsbalken-Animation erstellt und wie man Textanimationen zu Ihren Plots hinzufügt. Bleiben Sie dran!

3D-Plots mit Matplotlib animieren

Die 3D-Fähigkeiten von Matplotlib können genutzt werden, um faszinierende Animationen zu erstellen, die eine zusätzliche Dimension zu Ihren Datenvisualisierungen hinzufügen. Der Prozess ist ähnlich wie bei der Erstellung von 2D-Animationen, aber anstatt einen 2D-Plot zu erstellen, erstellen Sie einen 3D-Plot mit der Klasse Axes3D.

Hier ist ein Beispiel für die Erstellung einer 3D-Oberflächenanimation:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from mpl_toolkits.mplot3d import Axes3D
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
 
def update(num):
    ax.view_init(elev=10., azim=num)
    return ln,
 
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 100), blit=True)
plt.show()

In diesem Beispiel ändert die update-Funktion den Betrachtungswinkel des Plots für jeden Frame und erzeugt so einen Rotations­effekt.

Erstellung einer Fortschrittsbalken-Animation mit Matplotlib

Fortschrittsbalken eignen sich hervorragend, um den Fortschritt einer Berechnung oder eines Prozesses zu visualisieren. Mit Matplotlib können Sie einen animierten Fortschrittsbalken erstellen, der sich in Echtzeit aktualisiert. Hier ein einfaches Beispiel:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
fig, ax = plt.subplots()
bar = plt.bar([0], [0], color='b')
 
def update(i):
    bar[0].set_height(i / 100.)
    return bar
 
ani = FuncAnimation(fig, update, frames=range(101), repeat=False)
plt.show()

In diesem Beispiel wird die Höhe der Leiste in jedem Frame aktualisiert, was den Effekt eines sich füllenden Fortschrittsbalkens erzeugt.

Hinzufügen von Textanimationen zu Matplotlib-Plots

Die Hinzufügung von animiertem Text zu Ihren Plots kann diese informativer und ansprechender machen. Sie können den Text in Ihren Matplotlib-Plots mit der Klasse Text und der Klasse FuncAnimation animieren. Hier ein Beispiel:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
fig, ax = plt.subplots()
text = ax.text(0.5, 0.5, '', ha='center')
 
def update(i):
    text.set_text(f'Frame {i}')
    return text,
 
ani = FuncAnimation(fig, update, frames=range(10), blit=True)
plt.show()

In diesem Beispiel wird der auf dem Plot angezeigte Text in jedem Frame aktualisiert, was eine einfache Textanimation erzeugt.

Animieren mehrerer Subplots mit Matplotlib

Matplotlib ermöglicht die Erstellung mehrerer Subplots innerhalb einer einzigen Abbildung, und diese Subplots können individuell animiert werden. Dies ist besonders nützlich, wenn Sie verschiedene Datensätze oder verschiedene Ansichten desselben Datensatzes nebeneinander vergleichen möchten. Hier ein Beispiel, wie man mehrere Subplots animiert:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
fig, axs = plt.subplots(2)
 
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
 
line1, = axs[0].plot(x, y1, color='blue')
line2, = axs[1].plot(x, y2, color='red')
 
def update(frame):
    line1.set_ydata(np.sin(x + frame / 100))
    line2.set_ydata(np.cos(x + frame / 100))
    return line1, line2
 
ani = FuncAnimation(fig, update, frames=range(100), blit=True)
plt.show()

In diesem Beispiel haben wir zwei Subplots: Einen, der eine Sinuswelle zeigt, und einen, der eine Kosinuswelle zeigt. Die update-Funktion ändert die Phase der Wellen und erzeugt so eine Animation von zwei Wellen, die synchron bewegt werden.

Erstellen von Animationen mit wechselnden Farbpaletten

Die Änderung der Farbpalette Ihrer Animation kann Ihrer Visualisierung eine zusätzliche Informationsebene hinzufügen. Sie können beispielsweise Farbe verwenden, um eine dritte Dimension in einem 2D-Plot darzustellen oder bestimmte Datenpunkte hervorzuheben. Hier ein Beispiel, wie Sie eine Animation mit einer wechselnden Farbpalette erstellen können:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib.cm import get_cmap
 
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
scat = ax.scatter(x, y, c=y, cmap=get_cmap('viridis'))
 
def update(frame):
    y = np.sin(x + frame / 100)
    scat.set_offsets(np.c_[x, y])
    scat.set_array(y)
    return scat,
 
ani = FuncAnimation(fig, update, frames=range(100), blit=True)
plt.show()

In diesem Beispiel verwenden wir die Funktion scatter, um ein Streudiagramm einer Sinuswelle zu erstellen, bei dem die Farbe jedes Punktes durch seinen y-Wert bestimmt wird. Die Funktion update ändert die Phase der Welle und aktualisiert die Farben der Punkte, was eine Animation einer sich bewegenden Welle mit einer wechselnden Farbpalette erzeugt.

Animation von Echtzeitdaten mit Matplotlib

Matplotlib-Animationen können auch verwendet werden, um Echtzeitdaten zu visualisieren. Dies kann in verschiedenen Anwendungen nützlich sein, wie z. B. bei der Überwachung von Sensordaten, der Verfolgung von Aktienkursen oder der Visualisierung von maschinellen Lernalgorithmen. Hier ein Beispiel, wie Sie Echtzeitdaten animieren können:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
 
fig, ax = plt.subplots()
line, = ax.plot([])
 
def update(frame):
    line.set_data(range(frame), np.random.rand(frame))
    ax.relim()
    ax.autoscale_view()
    return line,
 
ani = FuncAnimation(fig, update, frames=range(1, 101), blit=True)

plt.show()


In diesem Beispiel generiert die `update`-Funktion einen neuen zufälligen Datenpunkt für jeden Frame und simuliert so Echtzeitdaten. Die Plot-Grenzen werden in jedem Frame aktualisiert, um die neuen Daten anzupassen.

## Verwendung von Matplotlib zur Animation wissenschaftlicher Simulationen

Die Animationsfähigkeiten von Matplotlib können verwendet werden, um wissenschaftliche Simulationen zu visualisieren.

Beispielsweise können Sie die Bewegung von Teilchen in einer physikalischen Simulation, das Wachstum einer Population in einer biologischen Simulation oder die Ausbreitung einer Krankheit in einer epidemiologischen Simulation animieren. Hier ist ein Beispiel, wie Sie eine einfache physikalische Simulation eines springenden Balls animieren können:

```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ball = plt.Circle((5, 5), 0.5, color='blue')
ax.add_patch(ball)

vx, vy = 0.1, 0.2  # Geschwindigkeit

def update(frame):
    x, y = ball.center
    x += vx
    y += vy
    if x > 10 or x < 0:  # Zurückprallen bei Kollision mit dem Rand
        vx *= -1
    if y > 10 or y < 0:
        vy *= -1
    ball.center = (x, y)
    return ball,

ani = FuncAnimation(fig, update, frames=range(100), blit=True)
plt.show()

In diesem Beispiel aktualisiert die update-Funktion die Position des Balls basierend auf seiner Geschwindigkeit und kehrt die Geschwindigkeit um, wenn der Ball den Rand des Plots trifft, was eine Animation eines springenden Balls erzeugt.

FAQs

  1. Was ist Matplotlib Animation?
    Matplotlib Animation ist eine Funktion der Matplotlib-Bibliothek in Python, die die Erstellung von dynamischen Visualisierungen ermöglicht. Im Gegensatz zu statischen Plots können Animationen Änderungen im Laufe der Zeit zeigen und sind daher ein ausgezeichnetes Werkzeug zur Darstellung von Zeitreihendaten.

  2. Wie erstelle ich eine Animation mit Matplotlib?
    Das Erstellen einer Animation in Matplotlib umfasst das Einrichten der Abbildung und der Achse des Plots, das Definieren der Animationsfunktion, die die Daten in jedem Frame aktualisiert, und das Erstellen einer Instanz der Klasse FuncAnimation, wobei die Abbildung, die Animationsfunktion und die Anzahl der Frames als Argumente übergeben werden.

  3. Welche Arten von Plots kann ich mit Matplotlib animieren?
    Matplotlib ermöglicht die Animation einer Vielzahl von Diagrammtypen, einschließlich Linienplots, Scatterplots, Balkendiagrammen, Histogrammen, 3D-Diagrammen und Unterplots.