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

在Spyder中复用绘图以避免循环绘图内存不足

解决Spyder中重复绘图内存耗尽的问题

你的问题核心是每次调用plt.plot()都会创建新的线条对象,堆积后占用大量内存。可以通过两种高效方式解决:

方式一:复用同一个线条对象

初始化时创建一条空线条,之后每次迭代只更新它的数据,而非新建线条,这是最省内存的方案:

import numpy as np
import matplotlib.pyplot as plt
import random as rn

arr = np.zeros(100)
plt.axis([1, 100, 1, 100])

# 初始化空线条,获取线条对象(注意逗号,plt.plot返回的是列表)
line, = plt.plot(arr)

for iterations in range(10):
    for n in range(100):
        arr[n] = rn.randrange(0, 99)
        # 仅更新线条的y轴数据,不新建对象
        line.set_ydata(arr)
        plt.pause(0.0001)

方式二:每次绘制前清除当前轴内容

如果需要保留动态绘制的视觉逻辑,可在每次绘图前清除坐标轴内的旧内容,避免旧线条堆积:

import numpy as np
import matplotlib.pyplot as plt
import random as rn

arr = np.zeros(100)
plt.axis([1, 100, 1, 100])

for iterations in range(10):
    for n in range(100):
        arr[n] = rn.randrange(0, 99)
        # 清除当前坐标轴的所有内容
        plt.cla()
        # 重新设置坐标轴范围,避免cla()后范围自动变化
        plt.axis([1, 100, 1, 100])
        plt.plot(arr)
        plt.pause(0.0001)

额外优化建议

  • 绝对避免在循环内频繁调用plt.plot(),这是内存泄漏的核心原因
  • 在Spyder的IPython控制台中,确保绘图后端设置为inline或automatic,减少独立绘图窗口的创建
  • 针对超大规模迭代场景,若复用线条仍有内存压力,可定期调用plt.close()关闭闲置的绘图窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:15:04