2201_75335496 2024-06-23 21:32 采纳率: 76.5%
浏览 2
已结题

python plt.subplots创建画布时过大导致报错怎么办?

这怎么办?

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 749, in callit
    func(*args)
  File "C:\Users\Administrator\Desktop\PYExe\2024项目\系统工具\开机启动\StartUp_Log_Viewer.py", line 96, in draw
    fig, ax = plt.subplots(figsize=(len(namelist) * 4.2,len(valuelist) + 2))
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 1453, in subplots
    fig = figure(**fig_kw)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 809, in figure
    FigureClass=FigureClass, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\pyplot.py", line 325, in new_figure_manager
    return _get_backend_mod().new_figure_manager(*args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\backend_bases.py", line 3494, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\backends\_backend_tk.py", line 965, in new_figure_manager_given_figure
    canvas = cls.FigureCanvas(figure, master=window)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\_api\deprecation.py", line 389, in wrapper
    return func(*inner_args, **inner_kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\matplotlib\backends\_backend_tk.py", line 176, in __init__
    master=self._tkcanvas, width=w, height=h)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 3501, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: not enough free memory for image buffer

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-23 21:32
    关注

    引自免费微信小程序:皆我百晓生

    这个问题是由于内存不足导致的,特别是在使用plt.subplots()函数创建多张子图时。当图形界面中的元素过多(例如图像、图表等)时,可能会消耗大量的内存。

    为了解决这个问题,您可以尝试以下方法之一:

    1. 使用 plt.figure() 来创建一个新的绘图窗口,并在其中绘制您的数据:
    import matplotlib.pyplot as plt
    
    # 创建一个新的绘图窗口
    fig = plt.figure()
    
    # 在新窗口中绘制数据
    ax = fig.add_subplot()
    ax.plot([1, 2, 3, 4])
    

    这种方法可以确保每个子图占用较少的内存,从而避免内存溢出的问题。

    1. 如果您需要保留多个子图,可以在创建第一个子图后调用 plt.show()plt.draw() 来更新当前窗口,并继续添加更多的子图。
    import matplotlib.pyplot as plt
    
    # 创建一个新的绘图窗口
    fig = plt.figure()
    
    # 添加多个子图到窗口
    for i in range(5):
        ax = fig.add_subplot(5, 1, i+1)
        ax.plot([i for i in range(10)])
    
    # 更新当前窗口
    plt.draw()
    
    # 展示窗口内容
    plt.show()
    

    通过这些方法,您可以有效地控制每个子图占用的内存大小,从而解决内存溢出的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月23日

悬赏问题

  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)