使用matplotlib.animation从一系列matplotlib图中创建电影

时间:2013-12-22 20:07:14

标签: python animation matplotlib png movie

我有一个生成一系列时间依赖图的脚本。我想把它们“缝合”在一起制作一部电影。

我最好使用matplotlib.animation。我查看了matplotlib文档中的示例,但我无法理解它是如何工作的。

我的脚本目前在连续的时间值上绘制了20个图,并将这些图保存为00001.png,最多为000020.png:

from scipy.integrate import odeint 
from numpy import *
from math import cos
import pylab

omega=1.4 
delta=0.1 
F=0.35 

def f(initial,t):  
    x,v=initial                 
    xdot=v
    vdot=x-x**3-delta*v-F*cos(omega*t)
    return array([xdot,vdot])


T=2*pi/omega 
nperiods = 100 
totalsteps= 1000
small=int((totalsteps)/nperiods)
ntransients= 10
initial=[-1,0] 


kArray= linspace(0,1,20)

for g in range (0,20):
    k=kArray[g]

    x,v=initial

    xpc=[]
    vpc=[]

    if k==0:
        x,v=x,v
    else:
        for i in range(1,nperiods)
            x,v=odeint(f,[x,v],linspace(0,k*T,small))[-1]   )

    for i in range (1,nperiods):
        x,v=odeint(f,[x,v],linspace(k*T,T+k*T,small))[-1] 
        xpc.append(x)  
        vpc.append(v)

    xpc=xpc[ntransients:]
    vpc=vpc[ntransients:]


    pylab.figure(17.8,10) 
    pylab.scatter(xpc,vpc,color='red',s=0.2)
    pylab.ylim([-1.5,1.5])
    pylab.xlim([-2,2])

    pylab.savefig('0000{0}.png'.format(g), dpi=200)

我很感激任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

我认为matplotlib.animation.FuncAnimation正是您所寻找的。基本上,它反复调用已定义的函数,根据需要传入(可选)参数。这正是您在for g in range(0,20):代码中所做的。您还可以定义init函数以设置内容。查看基类matplotlib.animation.Animation,了解有关格式,保存,MovieWriter类等的更多信息。