我的知识记录

Python matplotlib保存高清图片:dpi与矢量图设置

Python matplotlib保存的图片发报告模糊?详解savefig的dpi参数、矢量图SVG/PDF导出、透明背景和图片尺寸控制,让图表打印不糊。

场景痛点

用matplotlib画完图,保存成PNG贴到PPT里,放大后边缘锯齿严重,投到大屏幕上全是马赛克。直接截图更糊。根因是保存时dpi默认只有100,图片尺寸也小。这篇讲怎么调dpi、怎么存矢量图、怎么控制画布尺寸,让导出的图表打印和投屏都清晰。

用到的库

pip install matplotlib

完整代码

# 导入库
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

# 解决中文乱码
matplotlib.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "Arial Unicode MS"]
matplotlib.rcParams["axes.unicode_minus"] = False


def draw_high_quality():
months = ["1月", "2月", "3月", "4月", "5月", "6月"]
values = [120, 150, 180, 160, 210, 260]

# figsize 单位是英寸,8x5 英寸在 dpi=300 下就是 2400x1500 像素
fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
ax.bar(months, values, color="#4C72B0")
ax.set_title("高清图表示例", fontsize=14)
ax.set_ylabel("数值")

plt.tight_layout()

# 1. 保存高清PNG,dpi=300 满足印刷要求
plt.savefig("hd_output.png", dpi=300, bbox_inches="tight")

# 2. 保存矢量图SVG,无限放大不模糊,适合PPT和印刷
plt.savefig("hd_output.svg", bbox_inches="tight")

# 3. 保存PDF矢量图,适合插入Word论文
plt.savefig("hd_output.pdf", bbox_inches="tight")

# 4. 保存透明背景PNG,方便叠加到深色PPT背景
plt.savefig("hd_transparent.png", dpi=300, transparent=True, bbox_inches="tight")

plt.close()
print("已生成:hd_output.png / .svg / .pdf / hd_transparent.png")


if __name__ == "__main__":
draw_high_quality()

代码讲解

  • figsize=(8, 5) 单位是英寸,8×5英寸在300dpi下输出2400×1500像素,A4纸印刷绰绰有余。
  • savefig(dpi=300) 把PNG分辨率从默认100提到300,屏幕显示和打印都够清晰。
  • bbox_inches="tight" 自动裁掉图片四周多余的白边,否则保存的图上下左右有大片空白。
  • 存成 .svg.pdf 是矢量格式,放大多少倍都不会模糊,PPT里插图首选SVG。
  • transparent=True 让背景变透明,叠加到深色PPT模板上不会出现白底方块。

运行结果

当前目录生成四个文件:hd_output.png(300dpi高清位图)、hd_output.svg(矢量图)、hd_output.pdf(矢量PDF)、hd_transparent.png(透明背景PNG)。用图片查看器打开PNG,放大到200%确认边缘无锯齿;SVG文件拖进浏览器可无限缩放。

注意事项

  • savefig 必须在 plt.show() 之前调用,如果先show再save,存出来是空白图。
  • dpi不是越大越好,屏幕展示用150就够,印刷用300,存到600文件会很大且没有实际增益。
  • 矢量图SVG在旧版PPT里可能不兼容,重要场合同时存一份PNG兜底。
  • 保存路径含中文时,Windows下用绝对路径或先切换工作目录,相对路径一般也没问题。

Python matplotlib保存高清图片:dpi与矢量图设置

标签:

更新时间:2026-09-14 20:29:59

上一篇:Python matplotlib画散点图:分析两组数据相关性

下一篇:Python matplotlib画饼图:带百分比标签的占比图