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

重复调用绘图函数时如何阻止Notebook显示图像避免内存溢出

解决方案:强制Matplotlib不显示绘图仅保存文件

方案1:全局切换非交互Agg后端(最稳妥,适合全脚本仅批量出图的场景)

Agg是Matplotlib专为文件渲染设计的无GUI后端,完全不会触发窗口显示逻辑,也不会预留GUI相关内存,从根源避免显示和内存泄漏问题。
修改后的代码如下:

# 必须在导入pandas、pyplot之前先设置后端
import matplotlib
matplotlib.use('Agg')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 无法修改的原函数保持不变
def fig_gen():
    img = pd.DataFrame(np.random.random((100,2)))
    fig = img.plot()
    return fig

# 数千次循环不会触发显示,也不会内存溢出
for i in range(5000):
    ax = fig_gen()
    fig = ax.get_figure()
    fig.savefig(f'test_{i}.png')
    # 保存后立即关闭画布,彻底释放内存
    plt.close(fig)

方案2:临时切换后端(适合脚本其他部分仍需要交互绘图的场景)

如果不想修改全局后端配置,可以用rc_context临时在循环范围内生效Agg后端:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 无法修改的原函数保持不变
def fig_gen():
    img = pd.DataFrame(np.random.random((100,2)))
    fig = img.plot()
    return fig

# 仅在上下文范围内使用Agg后端
with plt.rc_context({'backend': 'Agg'}):
    for i in range(5000):
        ax = fig_gen()
        fig = ax.get_figure()
        fig.savefig(f'test_{i}.png')
        plt.close(fig)

原方案失效原因

你之前尝试的plt.ioff()仅关闭了交互模式的自动刷新逻辑,只要你使用的还是TkAgg、QtAgg这类带GUI的交互后端,创建画布时依然会初始化GUI相关资源,哪怕不显示也会持续占用内存,积累到一定程度就会触发内存不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:45:03