You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python图像保存失败求助:调用plt.savefig报AttributeError错误

解决图形保存时的AttributeError及正确保存方法

我来帮你拆解一下问题,以及给出具体的修复方案:

问题1:Matplotlib导入错误

你写的 import matplotlib as plt 是错误的用法——savefig 方法并不在 matplotlib 主模块里,而是属于 matplotlib.pyplot 子模块。不过更关键的是:你根本不需要用Matplotlib来保存当前的图形,因为你是用 graphics 库的 GraphWin 绘制的图形,两个库是完全独立的,Matplotlib无法识别graphics绘制的内容。

问题2:错误的图形保存方式

你的图形是基于 graphics 库生成的,必须用这个库本身支持的方法来保存,而不是强行调用Matplotlib的保存函数。

修复后的代码

下面是修正后的完整代码,包含两种保存方式(原生PostScript格式,以及转换为PNG格式):

import sys
import random
from graphics import *

def main():
    m=1
    n=2
    offset=50
    win = GraphWin("MyWin",500, 500)
    win.setBackground(color_rgb(0,0,0))
    for i in range(1,1000,1):
        r= random.uniform(0,1)
        q= int(3*r)
        m = (m/2) + q*(q-1)*75
        n = (n/2) + q*(3-q)*75
        pt = Point(m + offset,n + offset)
        pt.setOutline(color_rgb(255,255,0))
        pt.draw(win)
    print("graphic done")
    
    # 1. 用graphics原生方法保存为PostScript文件
    win.postscript(file="figure.ps")
    
    # 2. (可选)如果需要PNG格式,用PIL库转换(需先安装:pip install pillow)
    try:
        from PIL import Image
        img = Image.open("figure.ps")
        img.save("figure.png", "png")
        print("PNG文件已保存")
    except ImportError:
        print("若需保存为PNG,请先安装pillow库:pip install pillow")
    
    win.getMouse()
    win.close()

if __name__ == '__main__':
    main()

关键说明

  • graphics 库原生只支持保存为PostScript(.ps)格式,所以我们先用 win.postscript() 完成这一步。
  • 如果需要更通用的PNG格式,就借助PIL库(Pillow)将PS文件转换为PNG,代码里加了异常处理,避免没安装库时报错。
  • 删掉了原来无用的Matplotlib导入和保存代码,因为它们和你的绘图逻辑完全不匹配。

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

火山引擎 最新活动