Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib动画持续时间_Python_Animation_Matplotlib - Fatal编程技术网

Python matplotlib动画持续时间

Python matplotlib动画持续时间,python,animation,matplotlib,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

下面的代码显示并连续保存随机矩阵的动画。我的问题是如何调整保存的动画的持续时间。我这里唯一的参数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的类文档中查找合适的一个,但没有成功:

显示
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帧。

几年后,我创建了一个示例,每当我需要查看动画参数之间的关系时,我都会回到这个示例。我决定把它分享给任何觉得有用的人

tl/dr:

  • 对于保存的动画,持续时间将为
    帧*(1/fps)
    (以秒为单位)
  • 对于显示动画,持续时间将为
    帧*间隔/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个白色盒子,你可以在一分钟内制作一个时钟

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

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


[我会在有时间时尽快编辑较长的解释]

文档中确实说了:帧可以是生成器、iterable或多个帧。文档中确实说:帧可以是生成器、iterable或多个帧。所以我错了,我读了开头,不够仔细。另一方面,您的解决方案确实提供了正确的结果—它保存的文件具有与帧数/fps相等的适当持续时间。但是,显示的文件(而不是保存的文件)不遵循此模式,它只是以非周期性的方式不断显示新帧。你知道这是为什么吗?你说的“以非周期的方式”是什么意思?如果我有十帧,我希望显示的动画每十帧重复一次,或者至少停止一次。所谓非周期性,我的意思是帧与10帧(11)的周期不同帧(1)如果未设置帧怎么办?只是让动画循环回来。有没有办法限制
animation.save()
调用自身的持续时间?因此,如果我有两个列表,比如x和y,对应于钟摆随时间的坐标,比如从0秒到10秒,并且我希望显示的动画的持续时间为10秒(模拟实时),那么我应该如何设置参数?我一直在努力,但我就是不能让它按我所希望的那样工作。。