趋近智
制作信息丰富的数据可视化是数据分析的重要组成部分,但它们的价值远不止于通常生成它们的交互式环境。为了分享您的成果,在报告中包含图形,或将它们嵌入 (embedding)演示文稿中,您需要将绘图保存到持久文件中。Matplotlib 提供简单的方法将图形导出为适合不同用途的多种格式。
savefig 保存图形Matplotlib 中保存绘图的主要函数是 plt.savefig()(在使用有状态的 pyplot API 时)或 figure.savefig()(在直接处理 Figure 对象时)。它最基本的用法只需要一个文件名,包括所需的文件扩展名,Matplotlib 通常会根据该扩展名推断输出格式。
假设您已经创建了一个绘图,例如一个简单的折线图:
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建绘图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("Simple Sine Wave")
ax.set_xlabel("X-axis")
ax.set_ylabel("Y-axis")
# 将绘图保存到文件
# 使用 Figure 对象的方法(推荐)
fig.savefig("sine_wave_plot.png")
# 另外,也可以使用 pyplot 的有状态接口(如果未捕获 fig/ax)
# plt.savefig("sine_wave_plot.png")
# 如果不再需要,保存后关闭绘图是好习惯
plt.close(fig)
此代码片段生成一个简单的正弦波绘图,并将其保存为名为 sine_wave_plot.png 的 PNG 文件,存储在当前工作目录中。
Matplotlib 支持多种文件格式。选择何种格式取决于您打算如何使用保存的绘图:
要保存为不同格式,只需更改文件名中的文件扩展名:
# 保存为 PDF
fig.savefig("sine_wave_plot.pdf")
# 保存为 SVG
fig.savefig("sine_wave_plot.svg")
savefig 函数提供多个参数 (parameter)来控制输出:
dpi (每英寸点数): 控制栅格格式(如 PNG、JPG)的分辨率。更高的 DPI 意味着更高的分辨率和更大的文件大小。默认值通常为 100,但对于打印质量,300 或 600 等值很常见。
# 保存高分辨率 PNG
fig.savefig("sine_wave_plot_high_res.png", dpi=300)
format: 显式指定输出格式,如果需要,可覆盖文件名扩展名。
# 显式指定 PDF 格式
fig.savefig("sine_wave_output", format="pdf") # 保存为 sine_wave_output.pdf
transparent: 如果设置为 True,绘图的背景(图形补丁,不包括坐标轴补丁,除非它们也设置为透明)将保存为透明。当将绘图叠加到其他内容上时,这对于 PNG 和 SVG 格式特别有用。
fig.savefig("sine_wave_transparent.png", transparent=True)
bbox_inches: 控制保存图形的边界框。设置 bbox_inches='tight' 非常有用,因为它会自动调整图形大小,只包含绘图元素(标题、标签、刻度、艺术元素),并去除图形周围多余的空白。
# 保存时空白最少
fig.savefig("sine_wave_tight.png", bbox_inches='tight')
facecolor、edgecolor: 您可以指定保存图形的背景颜色,这可能与显示颜色不同。
# 保存为浅灰色背景
fig.savefig("sine_wave_gray_bg.png", facecolor='#e9ecef') # 使用浅灰色十六进制代码
由于 Seaborn 函数通常基于 Matplotlib 对象(通常返回一个 Matplotlib Axes 对象),因此保存 Seaborn 绘图遵循相同的原则。如果 Seaborn 函数返回一个 Axes 对象,您可以访问其父 Figure 进行保存。对于返回 Seaborn FacetGrid 或类似对象的图形级函数,如 relplot、catplot、displot 或 pairplot,这些对象通常有一个指向底层 Matplotlib Figure 的 .figure 属性。
import seaborn as sns
import pandas as pd
# 示例数据
data = pd.DataFrame({'x': x, 'y': y})
# 创建一个 Seaborn 绘图(返回 Axes)
fig, ax = plt.subplots() # 首先创建图形和坐标轴
sns.lineplot(data=data, x='x', y='y', ax=ax)
ax.set_title("Seaborn Line Plot")
# 使用图形对象保存
fig.savefig("seaborn_lineplot.png", dpi=150, bbox_inches='tight')
plt.close(fig)
# 图形级函数示例(返回 FacetGrid)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species")
# 使用 FacetGrid 的 figure 属性保存
g.figure.savefig("seaborn_pairplot.pdf", bbox_inches='tight')
plt.close(g.figure) # 关闭底层图形
petal_length_vs_width_scatter.png 而不是 plot1.png)。results/figures/)中。bbox_inches='tight': 它几乎总能通过最小化不必要的空白来改善外观。dpi): 为预期用途选择合适的 DPI(例如,网页使用 72-100,打印使用 300+)。plt.close(fig) 或 plt.close('all') 来释放内存,尤其是在脚本中生成大量绘图时。有效地保存您的可视化内容可确保从 Matplotlib 和 Seaborn 中获得的见解能够得以保留、分享,并融入到您的机器学习 (machine learning)项目和报告的更广阔背景中。
这部分内容有帮助吗?
savefig函数文档,详细说明其参数、支持的格式和高级用法。© 2026 ApX Machine LearningAI伦理与透明度•