matplotlib动画持续时间

时间:2014-02-25 10:00:13

标签: python animation matplotlib

下面的代码连续显示并保存随机矩阵的动画。我的问题是如何调整我保存的动画的持续时间。我这里唯一的参数是fps,dpi控制一帧剩余的秒数,第二个控制图像的质量。 我想要的是实际控制要保存的帧数就矩阵而言实际存储的数量。

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

fig = plt.figure()

N = 5

A = np.random.rand(N,N)
im = plt.imshow(A)

def updatefig(*args):
    im.set_array(np.random.rand(N,N))
    return im,

ani = animation.FuncAnimation(fig, updatefig, interval=200, blit=True) 

ani.save('try_animation.mp4', fps=10, dpi=80) #Frame per second controls speed, dpi       controls the quality 
plt.show()

我很想知道是否应该添加更多参数。我试图在matplotlib的类文档中寻找合适的一个但是我没有成功:

http://matplotlib.org/api/animation_api.html#module-matplotlib.animation

2 个答案:

答案 0 :(得分:8)

The documentation显示FuncAnimation接受参数frames,该参数控制播放的总帧数。因此,您的代码可以阅读

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

fig = plt.figure()

N = 5

A = np.random.rand(N,N)
im = plt.imshow(A)

def updatefig(*args):
    im.set_array(np.random.rand(N,N))
    return im,

ani = animation.FuncAnimation(fig, updatefig, frames=10, interval=200, blit=True) 

ani.save('try_animation.mp4', fps=10, dpi=80) #Frame per second controls speed, dpi       controls the quality 
plt.show()

播放10帧。

答案 1 :(得分:7)

多年以后我建立了这个例子,每次我都需要看看动画的参数如何在它们之间相关。我决定在这里分享它,无论谁发现它有用。

tl / dr:

  • 对于已保存的动画,持续时间将为frames * (1 / fps)(以秒为单位)
  • 对于显示动画,持续时间将为frames * interval / 1000(以秒为单位)

下面的代码允许您在提供即时视觉反馈的环境中使用此设置。

此代码构建一个根据参数滴答的时钟:

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


fig = plt.figure(figsize=(16, 12))
ax = fig.add_subplot(111)
# You can initialize this with whatever
im = ax.imshow(np.random.rand(6, 10), cmap='bone_r', interpolation='nearest')


def animate(i):
    aux = np.zeros(60)
    aux[i] = 1
    image_clock = np.reshape(aux, (6, 10))
    im.set_array(image_clock)

ani = animation.FuncAnimation(fig, animate, frames=60, interval=1000)
ani.save('clock.mp4', fps=1.0, dpi=200)
plt.show()

这将生成并保存一个如下所示的动画:

enter image description here

所以关键是随着时间的推移,黑色方块将沿着大的白色方块移动。有60个白色的盒子,所以你可以在一分钟内建立一个时钟。

现在,需要注意的重要事项是有两个参数可以决定黑匣子的移动速度:interval函数中的animation.FuncAnimation和'fps'在ani.save函数中。第一个控制将显示的动画中的速度,第二个控制将保存的动画中的速度。

如上面的代码所示,您将生成60帧,并以每秒1帧的速度显示。这意味着时钟每秒钟都会滴答作响。如果您希望已保存的动画时钟每两秒钟一次,则应设置fps=0.5。如果您希望显示的动画时钟每两秒钟点击一次,则应设置interval=2000

[我会尽快编辑更长的解释]