pin_drop当前位置:知识文库 ❯ 图文
Matplotlib savefig保存图片完全指南 - DPI、格式选择、裁剪透明
一、保存图片概述
plt.savefig()是matplotlib保存图表到文件的核心函数,支持PNG、JPG、SVG、PDF、EPS等多种输出格式。通过参数控制分辨率(DPI)、尺寸、透明背景、裁剪等,可以生成适合不同场景的图片文件。
无论是论文投稿的高分辨率图片、网页展示的压缩图片,还是演示文稿的高DPI PNG,savefig都能满足需求。
二、参数详解
三、支持的输出格式
四、代码示例实战
示例1:基本保存与多格式导出
代码示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.figure(figsize=(8, 5))
plt.plot(x, np.sin(x), 'b-', linewidth=2)
plt.title('Save Demo')
# 不同格式保存
plt.savefig('demo.png', dpi=100) # PNG格式
plt.savefig('demo.jpg', dpi=100, quality=90) # JPEG格式
plt.savefig('demo.svg') # SVG矢量格式
plt.savefig('demo.pdf') # PDF矢量格式
print("图片已保存为PNG、JPG、SVG、PDF格式")
# 查看支持的格式
from matplotlib import backend_bases
print(f"支持的格式: {plt.gcf().canvas.get_supported_filetypes()}")输出:
代码示例
图片已保存为PNG、JPG、SVG、PDF格式
支持的格式: {'eps': 'Encapsulated Postscript', 'jpg': 'Joint Photographic Experts Group', 'pdf': 'Portable Document Format', 'png': 'Portable Network Graphics', 'svg': 'Scalable Vector Graphics', 'tiff': 'Tagged Image File Format', 'webp': 'WebP Image'}示例2:分辨率与裁剪控制
代码示例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, np.sin(x), 'b-', linewidth=2)
ax.set_title('DPI & Crop Demo')
# 不同DPI对比
fig.savefig('dpi_72.png', dpi=72)
fig.savefig('dpi_150.png', dpi=150)
fig.savefig('dpi_300.png', dpi=300)
# 紧密裁剪
fig.savefig('tight_crop.png', dpi=150, bbox_inches='tight', pad_inches=0.1)
# 透明背景
fig.savefig('transparent.png', dpi=150, transparent=True)
print("不同DPI和裁剪方式的图片已保存")输出:
代码示例
不同DPI和裁剪方式的图片已保存示例3:论文投稿标准图片
代码示例
import matplotlib.pyplot as plt
import numpy as np
def save_for_publication(fig, filename, journal='default'):
"""按期刊标准保存图片"""
configs = {
'default': {'dpi': 300, 'format': 'pdf', 'bbox_inches': 'tight'},
'nature': {'dpi': 300, 'format': 'tiff', 'bbox_inches': 'tight'},
'ieee': {'dpi': 600, 'format': 'eps', 'bbox_inches': 'tight'},
}
config = configs.get(journal, configs['default'])
fig.savefig(filename, **config)
print(f"已按{journal}标准保存: {filename}")
# 创建论文级图表
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(figsize=(3.5, 2.5)) # 单栏宽度
ax.plot(x, np.sin(x), 'b-', linewidth=1.5, label='sin(x)')
ax.plot(x, np.cos(x), 'r--', linewidth=1.5, label='cos(x)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend(fontsize=8)
ax.tick_params(labelsize=8)
# 按不同期刊标准保存
save_for_publication(fig, 'paper_default.pdf', 'default')
save_for_publication(fig, 'paper_nature.tiff', 'nature')
save_for_publication(fig, 'paper_ieee.eps', 'ieee')输出:
代码示例
已按default标准保存: paper_default.pdf
已按nature标准保存: paper_nature.tiff
已按ieee标准保存: paper_ieee.eps五、实际应用场景
-
论文投稿:保存为PDF或TIFF格式,DPI不低于300,确保印刷清晰
-
网页展示:保存为PNG格式,透明背景,适当压缩减少加载时间
-
演示文稿:保存为高DPI的PNG,确保投影仪上显示清晰
六、注意事项
注意:
savefig()必须在plt.show()之前调用,show()会清空图形,之后savefig只会保存空白图片。
注意:DPI越高图片文件越大,论文用300DPI即可,网页用72-150DPI。矢量格式(SVG/PDF/EPS)不受DPI影响。
注意:矢量格式(SVG/PDF/EPS)可以无限放大不失真,非常适合论文投稿和印刷出版。位图格式在放大后会出现像素化。
七、常见问题FAQ
savefig应该放在show()之前还是之后?
必须放在show()之前。plt.show()会清空当前图形,如果在show()之后调用savefig,只会保存一张空白图片。正确顺序:先savefig保存,再show显示(如果需要)。
bbox_inches='tight'有什么作用?
bbox_inches='tight'会紧密裁剪图片,自动去除图表周围多余的空白区域,让保存的图片更加紧凑美观。配合pad_inches参数可以控制裁剪后保留的边距大小。
位图和矢量图有什么区别?应该选哪种?
位图(PNG/JPG)由像素组成,放大后会失真,适合网页和屏幕显示。矢量图(SVG/PDF/EPS)由数学公式定义,无限放大不失真,适合论文投稿和印刷。论文投稿优先选矢量格式,网页展示选PNG。
如何批量保存多张图表?
使用循环配合f-string:for i, data in enumerate(datas): plt.figure(); plt.plot(data); plt.savefig(f'chart_{i}.png', dpi=150, bbox_inches='tight'); plt.close()。记得在循环末尾调用plt.close()释放内存。
本文涉及AI创作
内容由AI创作,请仔细甄别