[PYTHON] Animation mit matplotlib

Überblick

Mit der matplotlib von Python können Sie auf einfache Weise gut aussehende Diagramme erstellen. Die Funktion zum Erstellen von Diagrammanimationen ist in matplotlib ebenfalls standardmäßig enthalten. Hier finden Sie eine umfassende Zusammenfassung der Verwendung.

Animation erstellen

Es werden zwei Hauptmethoden angeboten:

--Animation durch Übergeben einer Liste vorgefertigter Diagrammobjekte (ArtistAnimation)

Der Grund für Ersteres ist Artist Animation, da matplotlib Grafikobjektkünstler nennt. Diesen Namen werden wir auch hier verwenden. Wenn Sie eine gewisse Leistung benötigen oder den Titel oder die Feinsteuerung in der Animation ändern müssen, sollten Sie Letzteres auswählen.

Lassen Sie uns jeweils ein Codebeispiel vorstellen.

ArtistAnimation

Übergabe an ArtistAnimation ist eine Liste der Künstlerliste [^ 1]. Wenn jedes Bild der Animation durch Bild 1, Bild 2, ... dargestellt wird,


[
  [
Künstler in Bild 1 angezeigt_1,Künstler in Bild 1 angezeigt_2, ...
  ],
  [
Künstler in Bild 2 angezeigt_1,Künstler in Bild 2 angezeigt_2, ...
  ],
  ...
]

Es wird sein. Beachten Sie, dass einige Matplotlib-Diagrammtypen und -Funktionen Künstler und andere eine Liste von Künstlern zurückgeben. Im folgenden Beispiel wird beispielsweise nur die Liste der von der Plotfunktion zurückgegebenen Künstler angehängt.

import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
x = np.arange(10)
for i in range(10):
    y = np.random.rand(10)
    im = ax.plot(x, y)
    artists.append(im)
anim = ArtistAnimation(fig, artists, interval=1000)
fig.show()

Hängen Sie für Funktionen, die einen Künstler zurückgeben, wie z. B. Scatter, die in die Liste eingeschlossene an.

import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
x = np.arange(10)
for i in range(10):
    y = np.random.rand(10)
    im = ax.scatter(x, y)
    artists.append([im])
anim = ArtistAnimation(fig, artists, interval=1000)
fig.show()

FuncAnimation

Für jedes Bild der Animation wird eine Funktion aufgerufen. Es kann zwei Verarbeitungsmuster geben:

--Erstelle jedes Mal einen neuen Künstler (du musst den zuvor erstellten Künstler behalten und explizit löschen)

Ich werde jeden Code vorstellen.

Erstellungsmuster

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
ims = []
x = np.arange(10)

ax.set_xlim(0, 9)
ax.set_ylim(0, 1)

def update_anim(i):
    y = np.random.rand(10)
    if len(ims) > 0:
        im = ims.pop()
        im.remove()
    im, = ax.plot(x, y)
    ims.append(im)

anim = FuncAnimation(fig, update_anim, interval=1000)
fig.show()

Datenaktualisierungsmuster

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
im, = ax.plot([], [])
x = np.arange(10)
ax.set_xlim(0, 9)
ax.set_ylim(0, 1)

def update_anim(frame):
    y = np.random.rand(10)
    im.set_data(x, y)
    
anim = FuncAnimation(fig, update_anim, blit=False)
fig.show()

Das Aktualisieren von Daten ist natürlich effizienter.

blit=True

Wenn Sie das optionale Argument "blit" auf "True" setzen, können Sie das Zeichnen anscheinend weiter beschleunigen, indem Sie die in der Computergrafik verwendete Technik "blitting" verwenden. In diesem Fall muss die Liste der Künstler zurückgegeben werden, die aus der Funktion entfernt werden sollen.

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
fig, ax = plt.subplots()
artists = []
im, = ax.plot([], [])
x = np.arange(10)
ax.set_xlim(0, 9)
ax.set_ylim(0, 1)

def update_anim(frame):
    y = np.random.rand(10)
    im.set_data(x, y)
    return im,
    
anim = FuncAnimation(fig, update_anim, blit=True)
fig.show()

Speichern und teilen Sie Animationen

Die erstellte Animation kann wie folgt in einer Datei gespeichert werden.

Export nach GIF

anim.save('anim.gif', writer='imagemagick', fps=4)

Export nach mp4

anim.save('anim.mp4', writer='ffmpeg', fps=4)

Wenn Sie an einem Jupyter-Notizbuch arbeiten, können Sie "% matplotlib nbagg" anstelle von "% matplotlib inline" angeben, um ein Diagramm anzuzeigen, mit dem der Benutzer inline interagieren kann. Eine Animation wird ebenfalls ausgeführt. Es ist jedoch schwer und wird im nbviewer nicht angezeigt. Wenn Sie es also nur inline anzeigen möchten, wird empfohlen, das Video wie folgt einzubetten.

from IPython.display import HTML
HTML(anim.to_html5_video())

Fußnote

[^ 1]: Im Allgemeinen iterierbare Objekte, mit denen for-Schleifen erstellt werden können. Hier wird es allgemein als Liste bezeichnet.

Recommended Posts

Animation mit matplotlib
Animation mit matplotlib
Erstellen Sie eine Plotanimation mit Python + Matplotlib
Japanisch mit Matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib
Einfache Animation mit matplotlib (mp4, gif)
2-Achsen-Plot mit Matplotlib
Heatmap von Python + matplotlib
Banddiagramm mit Matplotlib
Lernen Sie mit Chemo Informatics Matplotlib
Echtzeitzeichnung mit Matplotlib
Verschiedene Farbleisten mit Matplotlib
3D-Plot mit Matplotlib
Stellen Sie die Achsen mit matplotlib ein
Die Basis der Graphentheorie mit Matplotlib-Animation
Zeichnen Sie Excel-Daten mit matplotlib (1)
Versuchen Sie es mit matplotlib mit PyCharm
Animation der Diffusionsgleichung mit NumPy
Zeichnen Sie eine erdähnliche Flussanimation mit Matplotlib und Cartopy
Zeichnen Sie Excel-Daten mit matplotlib (2)
Stapelbares Barplot mit Matplotlib
Wählen Sie mit matplotlib abgestufte Farben aus
Blasensortierung mit flauschiger Animation
Animieren Sie mehrere Diagramme mit matplotlib
Erstellen Sie mit matplotlib eine GIF-Animation aus einer Seriennummerndatei
Visualisieren Sie den Hohlraumfluss mit matplotlib und speichern Sie ihn als GIF-Animation
Python-Grafikhandbuch mit Matplotlib.
Inferenz- und Ergebnisanzeige mit Tensorflow + matplotlib
Japanisieren Sie Matplotlib mit Alpine mit Docker
[IOS] Zerlegen Sie die GIF-Animation mit Pythonista3.
Zeichne Japanisch mit matplotlib auf Ubuntu
Zeichnen Sie mit matplotlib ein loses Diagramm
Vielseitige Datenerfassung mit Pandas + Matplotlib
Heatmap mit Dendrogramm in Python + Matplotlib
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
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Implementieren Sie "Data Visualization Design # 2" mit matplotlib
[Einführung in Matplotlib] Achsen 3D-Animation: Ich habe mit 3D-Lisaju-Figuren gespielt ♬
Matplotlib Memorandum
Wie man mit matplotlib mehrere Figuren betitelt
[Python] Legen Sie den Diagrammbereich mit matplotlib fest
Passen Sie den Abstand zwischen den Figuren mit Matplotlib an
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Flexible Animationserstellung mit Animation.FuncAnimation von matplotlib
Matplotlib Galerie
Versuchen Sie, mit matplotlib eine Normalverteilung zu zeichnen
Matplotlib-Memo
Machen Sie mit matplotlib eine teilweise gezoomte Figur
Schreiben Sie SVG-Diagramme mit Matplotlib mit Heroku
Japanisches Diagramm mit VS Code + matplotlib anzeigen
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