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

如何解决matplotlib animation导出动画时出现多余内边距的问题

解决方法

根因

matplotlib的交互显示逻辑和文件保存逻辑使用两套独立的默认渲染参数,动画导出时调用的savefig默认会额外添加内边距,所以会出现plt.show()显示正常,但导出视频边距异常的问题。

修复代码

import matplotlib.pyplot as plt
import matplotlib.animation as animation

class Animation(animation.TimedAnimation):
    def __init__(self):
        # 固定画布尺寸、dpi,避免渲染参数不一致,数值可根据需求调整
        fig = plt.figure(figsize=(6, 4), dpi=100)
        fig.add_subplot(2, 2, 1)
        fig.add_subplot(2, 2, 2)
        fig.add_subplot(3, 2, (3, 4))
        # 自动匹配子图边距,pad参数可调整全局边距大小
        fig.tight_layout(pad=1.0)
        animation.TimedAnimation.__init__(self, fig, blit=True)

    def _draw_frame(self, frame_idx): 
        pass

    def new_frame_seq(self): 
        return iter(range(2))

ani = Animation()
# 保存时透传savefig参数,关闭自动裁剪,对齐显示效果
ani.save(
    'test.mp4',
    savefig_kwargs={
        "bbox_inches": None,
        "pad_inches": 0
    }
)

可选:手动精确控制边距

如果需要自定义边距、不需要自动布局,将fig.tight_layout(pad=1.0)替换为下面的代码即可,参数取值为0-1(相对于画布宽高的比例),无需设置负值,不会改变绘图比例:

fig.subplots_adjust(left=0.1, right=0.95, top=0.92, bottom=0.08)

修改后导出的视频边距会和直接绘图、plt.show()的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:45:04