Python matplotlib 如何把图表保存为图片文件(不弹窗显示)?
matplotlib 保存图表用 plt.savefig('plot.png'),支持 dpi、transparent 等参数。服务器无显示环境需切换 Agg 后端。本文介绍完整用法。
用 plt.savefig('plot.png') 替代 plt.show()。服务器等无图形界面环境需要在导入 pyplot 前设置 matplotlib.use('Agg') 后端。
基本用法
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [2, 4, 6, 8])
plt.title("示例图表")
plt.savefig('plot.png') # 保存为 PNG
plt.close() # 释放内存
格式由扩展名决定:.png、.pdf、.svg、.jpg 等。
常用参数
plt.savefig('plot.png',
dpi=300, # 分辨率(默认 100,印刷用 300)
bbox_inches='tight', # 裁掉多余白边
transparent=True # 透明背景
)
服务器环境(无显示器)
报 cannot connect to X server 或图保存不出来时,切换后端:
import matplotlib
matplotlib.use('Agg') # 必须在 import pyplot 之前
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
plt.savefig('plot.png')
常见问题(FAQ)
Q:保存的图片是空白的?
A:plt.show() 会清空当前图,savefig 要在 show 之前调用;或直接不用 show。
Q:中文标题显示为方框?
A:中文字体没配置。设置 plt.rcParams['font.sans-serif'] 为系统中文字体(如 SimHei、WenQuanYi),并处理负号显示问题。
Q:批量生成图表内存越来越大?
A:每张图保存后调用 plt.close() 释放 figure,循环中不复用 figure。