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




