2011-12-15 5 views
6

そこで、matplotlibでかわいいアニメーションを作る方法を学びました。たとえば、次のようになります。Matplotlibアニメーション - プレゼンテーションで使用する形式にエクスポートする方法

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 

plt.ion() 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.set_xlim(0, 1) 
ax.set_ylim(-2,2) 

dt = 0.01 
q = 0.01 
t = np.arange(0,1,dt) 
x = np.sin(2*np.pi*t) 
line, = ax.plot(t,x, '-') 
fig.canvas.draw() 
for i in xrange(100): 
    x = (1-q) * x + q* np.random.normal(size = len(t)) 
    line.set_ydata(x) 
    fig.canvas.draw() 

これはうまくいきます。しかし、私はこれを使って、例えば、PDFプレゼンテーションのような映画を作ることができますか?私はfig.savefig("test.gif")をしようとしましたが、matplotlibがgifをエクスポートしないことを示すエラーメッセージがあります。

外部ツールに頼らなくても(これは、たくさんのPNGを作成して一緒に縫い合わせるなど)、これを行う方法はありますか?

答えて

8

要するに、外部ツールを使用する以外に他の方法はありません。あなたはanimationsをmpeg4形式に保存するのに役立つ1.1.0の新しいモジュールがあります。これは、外部ツールを使用して、多くのフレームから1つのムービーへのこの変換を自動的に行います。 imagemagickの変換を使用してGIFを作成するか、ffmpegまたはmencoderを使用できます。これは、新しいアニメーションモジュールによって提供される2つのオプションです。

+1

+1。しかし、あなたはおそらくmemcoderの代わりにmencoderを意味しますね。 – EOL

+2

そうですね、各フレームを保存してmencoderを使用するには 'fig.savefig(" foo%d.png "%i")を追加するだけです。 –

+0

正確に。これが、新しいアニメーションモジュールの機能です。モジュールを使いたくない場合は、pythonからmencoderを呼び出し、その後、foo * pngファイルのリンクを解除することができます。 – Yann

6

あなたがmatplotlib.animationを使用して、あなたのパスにFFmpegのようなものを持っている場合、これは動作するはずです:

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib.animation import ArtistAnimation 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.set_xlim(0, 1) 
ax.set_ylim(-2,2) 

dt = 0.01 
q = 0.01 
t = np.arange(0,1,dt) 
x = np.sin(2*np.pi*t) 
images = [] 

for i in xrange(100): 
    x = (1-q) * x + q* np.random.normal(size = len(t)) 
    line, = ax.plot(t,x, '-') 
    images.append((line,)) 

line_anim = ArtistAnimation(fig, images, interval=50, blit=True) 
line_anim.save('my_animation.mp4') 
plt.show() 

かわいい、えっ?

+0

確かに!出力mp4のフレームレートを設定する方法はありますか? @danodonovan –

+1

'ArtistAnimation'の' interval'パラメータを変更すると、フレームレートが変更されます。おそらく 'FFmpeg'変数もありますが、私は' FFmpeg'エキスパートではありません。 – danodonovan

+0

ありがとう!これは非常に役に立ちます。 –

関連する問題