pin_drop当前位置:知识文库 ❯ 图文

Matplotlib savefig保存图片完全指南 - DPI、格式选择、裁剪透明

Matplotlib savefig保存图片完全指南 - DPI、格式选择、裁剪透明 | 小确幸生活

一、保存图片概述

plt.savefig()是matplotlib保存图表到文件的核心函数,支持PNG、JPG、SVG、PDF、EPS等多种输出格式。通过参数控制分辨率(DPI)、尺寸、透明背景、裁剪等,可以生成适合不同场景的图片文件。

无论是论文投稿的高分辨率图片、网页展示的压缩图片,还是演示文稿的高DPI PNG,savefig都能满足需求。

二、参数详解

参数 默认值 说明
fname 必填 文件路径,扩展名决定格式
dpi 'figure' 分辨率(每英寸点数),数值越高越清晰
format None 强制指定格式:'png'/'jpg'/'svg'/'pdf'
quality 75 JPEG质量(1-100),数值越高文件越大
transparent False 透明背景(PNG格式有效)
bbox_inches None 裁剪方式:'tight'为紧密裁剪,去除空白
pad_inches 0.1 bbox_inches='tight'时的内边距

三、支持的输出格式

格式 类型 特点 适用场景
PNG 位图 无损压缩、支持透明 网页、通用
JPEG 位图 有损压缩、文件小 照片类图片
SVG 矢量 可无限缩放不失真 网页、编辑
PDF 矢量 高质量、跨平台 论文投稿
EPS 矢量 PostScript格式 LaTeX论文
TIFF 位图 无损、高质 出版印刷
WebP 位图 高压缩比 网页

四、代码示例实战

示例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()释放内存。


标签: 保存图片 savefig DPI设置 矢量图 论文投稿 Python

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Matplotlib 3D绘图完全指南 - 3D散点图、曲面图、柱状图 下一篇: Matplotlib中文显示完全指南 - 字体配置、乱码解决、跨平台

poll相关推荐