Python Matplotlib FuncAnimation.save() 只保存 100 帧

标签 python animation matplotlib

我正在尝试保存我使用 Matplotlib 中的 FuncAnimation 类创建的动画。我的动画更复杂,但是当我尝试保存给定的简单示例时出现相同的错误 here .

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

pause = False
def simData():
    t_max = 10.0
    dt = 0.05
    x = 0.0
    t = 0.0
    while t < t_max:
        if not pause:
            x = np.sin(np.pi*t)
            t = t + dt
        yield x, t

def onClick(event):
    global pause
    pause ^= True

def simPoints(simData):
    x, t = simData[0], simData[1]
    time_text.set_text(time_template%(t))
    line.set_data(t, x)
    return line, time_text

fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], 'bo', ms=10) # I'm still not clear on this stucture...
ax.set_ylim(-1, 1)
ax.set_xlim(0, 10)

time_template = 'Time = %.1f s'    # prints running simulation time
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
fig.canvas.mpl_connect('button_press_event', onClick)
ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,
    repeat=True)
plt.show()

但是,当我尝试通过添加行来保存此动画时

ani.save('test.mp4')

最后,只保存前 100 帧。

动画保存后,函数重新启动并按预期显示,显示和更新图形 200 次(或直到 t 达到 t_max,无论我将其设置为多少)。但是保存的电影只包含前 100 帧。

暂停功能使其变得棘手。没有它,我可以将 frames = 200 放入 FuncAnimation 调用中,而不是使用我目前为 frames 参数使用的迭代器/生成器类型函数。但是通过仅输入 frames = 200,帧数似乎无法暂停。

我该如何解决这个问题?

最佳答案

ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,
                              repeat=True, save_count=200)  

将解决问题。

在内部,save 只保存固定数量的帧。如果传入固定长度的序列或数字,mpl 可以正确猜出长度。如果你传入一个(可能是无限的)生成器而不传入 save_count,它默认为 100。

关于Python Matplotlib FuncAnimation.save() 只保存 100 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980794/

相关文章:

jquery - 为什么这没有动画?

python - 如何检测是否为matplotlib轴生成了双轴

python - 如何在绘图中添加悬停注释

android - Lottie动画慢android

python - 来自 APE 服务器模块的 POST 请求出现问题

python - 如何从python中的json文件中读取json对象数组

python - seaborn:lmplot() 得到一个意外的关键字参数 'figsize'

python - Matplotlib ArtistAnimation 一步显示多个元素

python - Matplotlib 中极地等高线图的插值差异

Python: TypeError: 'function' 对象没有属性 '__getitem__'