Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1415:beispiel_zu_videos_mit_matplotlib

Beispiel zu Videos mit matplotlib

Das unten stehende Beispiel ist aus der Dokumentation von matplotlib. Dabei wird das Bild gar nicht angezeigt, sondern direkt in ein Video geschrieben. Anders als bei der Bildschirmanzeige muss man hier nicht fig.canvas.draw() aufrufen, um das in Daten bereits vorhandene Bild zu erzeugen.

Durch matplotlib.use(„Agg“) wird dafür gesorgt, dass nicht auf dem Bildschirm gezeichnet wird, sondern alle Graphiken als Einträge für eine png-Datei erzeugt werden. Diese werden durch grab_frame an den writer weitergereicht, der daraus eine (komprimierte) Video-Datei macht.

# -*- noplot -*-
 
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as manimation
 
FFMpegWriter = manimation.writers['ffmpeg']
metadata = dict(title='Movie Test', artist='Matplotlib',
        comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)
 
fig = plt.figure()
l, = plt.plot([], [], 'k-o')
 
plt.xlim(-5, 5)
plt.ylim(-5, 5)
 
x0,y0 = 0, 0
 
with writer.saving(fig, "writer_test.mp4", 100):
    for i in range(100):
        x0 += 0.1 * np.random.randn()
        y0 += 0.1 * np.random.randn()
        l.set_data(x0, y0)
        writer.grab_frame()

Die Struktur with wurde noch nicht erklärt. Sie wird benutzt, um beispielsweise eine Datei zu erzeugen und in dem Block, der nach dem Doppelpunkt kommt zu verwenden. Ist der Block vorbei, wird die Datei automatisch geschlossen; man nennt das einen *Kontextmanager*. Stattdessen könnte ihr aber auch die Datei (oder was immer es ist) von Hand öffnen und schließen. Im Beispiel:

writer.setup(fig, "writer_test.mp4", 100)
 
for i in range(50):
    x0 += 0.1 * np.random.randn()
    y0 += 0.1 * np.random.randn()
    l.set_data(x0, y0)
    writer.grab_frame()
 
writer.finish()
ws1415/beispiel_zu_videos_mit_matplotlib.txt · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)