下面的代码连续显示并保存随机矩阵的动画。我的问题是如何调整我保存的动画的持续时间。我这里唯一的参数是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
答案 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()
这将生成并保存一个如下所示的动画:
所以关键是随着时间的推移,黑色方块将沿着大的白色方块移动。有60个白色的盒子,所以你可以在一分钟内建立一个时钟。
现在,需要注意的重要事项是有两个参数可以决定黑匣子的移动速度:interval
函数中的animation.FuncAnimation
和'fps'在ani.save
函数中。第一个控制将显示的动画中的速度,第二个控制将保存的动画中的速度。
如上面的代码所示,您将生成60帧,并以每秒1帧的速度显示。这意味着时钟每秒钟都会滴答作响。如果您希望已保存的动画时钟每两秒钟一次,则应设置fps=0.5
。如果您希望显示的动画时钟每两秒钟点击一次,则应设置interval=2000
。
[我会尽快编辑更长的解释]