You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么matplotlib FuncAnimation增大持留时间后输出静态画面?

问题根因

matplotlib.animation.FuncAnimation 有一个默认参数 save_count=100,该参数限制了动画导出时最多缓存的帧数。当你把单帧持留时间设置为110时,仅第一帧就需要生成110个动画帧,已经超过了默认的100帧阈值,超出部分的帧会被直接截断,因此动画播放到第100帧后就不会再触发后续的帧更新,呈现为静止画面。

修复方案

创建FuncAnimation时显式指定save_count参数,值设置为所有持留时间的总和(也就是总动画帧数)即可,修改后的代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as img
import matplotlib.animation as anim
from IPython.display import HTML

df = pd.DataFrame({'pos':[1,2,4,3], 'time':[110,10,1,1]})
file = 'C:\\Users\\...'    
images = [img.imread(file+f'\\{i}.jfif') for i in range(1,5)]    # four images

fig = plt.figure()
def update(frame):
    if frame is None: return  
    
    fig.clear()
    plt.imshow(images[frame-1], animated=True)
    plt.tick_params(bottom=False, left=False, labelleft=False, labelbottom=False)


def frame_generator():
    for frame, cont in zip(df.pos, df.time):
        yield frame

        if cont > 1:
            for _ in range(int(cont)-1):
                yield None

# 计算总帧数传入save_count参数
total_frames = df['time'].sum()
ani = anim.FuncAnimation(fig, update, frames=frame_generator(), interval=100 
                         ,blit=False, repeat=False, save_count=total_frames)
plt.tight_layout()
HTML(ani.to_html5_video())

内容的提问来源于stack exchange,提问作者Kun C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:21:01