下面的代码显示并保存了连续的随机矩阵动画。我的问题是如何调整我保存的动画的持续时间。我这里唯一的参数 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
最佳答案
多年后,我构建了这个示例,每次我需要查看动画参数之间的关系时,我都会回过头来查看。我决定在这里将它分享给可能觉得它有用的人。
长话短说:
- 对于保存的动画,持续时间将为
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()
这将生成并保存如下所示的动画:
所以重点是随着时间的流逝,黑色方 block 将沿着白色大方 block 移动。有 60 个白盒子,因此您可以构建一个在一分钟内走完它的时钟。
现在,需要注意的重要事项是有两个参数决定了黑匣子移动的速度:interval
在animation.FuncAnimation
ani.save
中的函数和“fps”功能。第一个控制您将显示的动画的速度,第二个控制您将保存的动画的速度。
按照上面的代码,您将生成 60 帧,它们以每秒 1 帧的速度显示。这意味着时钟每秒滴答作响。如果你想让保存的动画时钟每两秒滴答一次,那么你应该设置fps=0.5
.如果你想让显示的动画时钟每两秒点击一次你应该设置interval=2000
.
[我会尽快编辑更长的解释]
关于python - matplotlib 动画持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010586/