当前有效matplotlib版本为:3.4.1

概述

savefig()函数的作用是保存当前图形,它是matplotlib输出的主要方式,可将图形保存为pngjpg等格式的图像,具体的输出与正在使用的后端(backends)有关。

函数的定义签名为matplotlib.pyplot.savefig(*args, **kwargs)

函数的调用签名为:savefig(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1, frameon=None, metadata=None)

函数的参数为:

  • fname:输出文件的名称。字符串、类路径对象或类二进制对象。必备参数。
    如果设置了format参数,文件按照format参数格式输出,文件名为fname。注意,如果文件名不会再追加format参数对应的扩展名或更改fname中的扩展名。因此可能出现文件扩展名与实际输出格式不一致的情况。
    如果没有设置format参数,当fname中包含扩展名时,会直接直接使用扩展名对应的格式输出(注意,扩展名如果不是支持的格式,将会抛出异常),当fname中不包含扩展名时,会直接按rcParams["savefig.format"]值(默认为png)输出,并将扩展名追加至fname
  • dpi:输出图像的分辨率(每英寸的像素点数)。浮点数或'figure',如果值为'figure',输出使用图形的分辨率,默认值为rcParams["savefig.dpi"](默认为'figure')。
  • qualityjpg文件输出的质量,仅对'jpg''jpeg'文件生效。整数,建议取值范围为[1-95],值超过100将会禁用jpeg压缩算法,可能会导致文件过大。默认值为rcParams["savefig.jpeg_quality"](默认值为95)。
  • facecolor:图像的背景色。颜色值或'auto',值为'auto'时,使用当前图形的背景色。默认值为rcParams["savefig.facecolor"] (即'auto')。
  • edgecolor:图像边缘颜色。颜色值或'auto',值为'auto'时,使用当前图形边缘颜色。默认值为rcParams["savefig.edgecolor"] (即'auto')。
  • orientationpostscript后端参数。取值范围为{'landscape', 'portrait'}。默认值为'portrait'
  • papertype:纸张大小,仅支持postscript输出。取值范围为{'letter', 'legal', 'executive', 'ledger', 'a0' - 'a10', 'b0' - 'b10'}。默认值为None
  • format:输出格式。字符串,支持的格式为eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff。默认值为None
  • backend:使用非默认后端渲染文件。字符串。可选参数。默认值为None
  • metadata:用于存储图像元数据的键值对。字典,取值依赖于输出图像格式和后端。可选参数。默认值为None
  • pil_kwargs: 保存图像是传递给PIL.Image.Image.save的参数。字典。可选参数。

原理

savefig()函数的调用链大致如下:
matplotlib.pyplot.savefig(*args, **kwargs)matplotlib.figure.savefig(self, fname, *, transparent=None, **kwargs)matplotlib.backend_bases.FigureCanvasBase.print_figure( self, filename, dpi=None, facecolor=None, edgecolor=None, orientation='portrait', format=None, *, bbox_inches=None, pad_inches=None, bbox_extra_artists=None, backend=None, **kwargs)

matplotlib.backend_bases.FigureCanvasBase类定义了matplotlib支持的输出格式及对应后端。

_default_filetypes = {
    'eps': 'Encapsulated Postscript',
    'jpg': 'Joint Photographic Experts Group',
    'jpeg': 'Joint Photographic Experts Group',
    'pdf': 'Portable Document Format',
    'pgf': 'PGF code for LaTeX',
    'png': 'Portable Network Graphics',
    'ps': 'Postscript',
    'raw': 'Raw RGBA bitmap',
    'rgba': 'Raw RGBA bitmap',
    'svg': 'Scalable Vector Graphics',
    'svgz': 'Scalable Vector Graphics',
    'tif': 'Tagged Image File Format',
    'tiff': 'Tagged Image File Format',
}
_default_backends = {
    'eps': 'matplotlib.backends.backend_ps',
    'jpg': 'matplotlib.backends.backend_agg',
    'jpeg': 'matplotlib.backends.backend_agg',
    'pdf': 'matplotlib.backends.backend_pdf',
    'pgf': 'matplotlib.backends.backend_pgf',
    'png': 'matplotlib.backends.backend_agg',
    'ps': 'matplotlib.backends.backend_ps',
    'raw': 'matplotlib.backends.backend_agg',
    'rgba': 'matplotlib.backends.backend_agg',
    'svg': 'matplotlib.backends.backend_svg',
    'svgz': 'matplotlib.backends.backend_svg',
    'tif': 'matplotlib.backends.backend_agg',
    'tiff': 'matplotlib.backends.backend_agg',
}