Python中保存Matplotlib绘图为图像文件的方法

Python中保存Matplotlib绘图为图像文件的方法

技术背景

在Python的数据可视化领域,Matplotlib是一个广泛使用的库,它提供了丰富的绘图功能。通常情况下,我们使用plt.show()来显示绘制的图形,但在很多场景下,我们需要将图形保存为图像文件,例如用于报告、文档或者网站展示等。本文将介绍如何使用Python的Matplotlib库将绘制的图形保存为图像文件。

实现步骤

1. 基本保存方法

使用matplotlib.pyplot.savefig函数可以将当前图形保存为文件,文件格式由文件名的扩展名决定。示例代码如下:

1
2
3
4
from matplotlib import pyplot as plt

plt.plot([1, 2, 3], [1, 4, 9])
plt.savefig('foo.png')

2. 去除图像周围的空白

有时候图像周围会有不必要的空白,可以使用bbox_inches='tight'参数来去除:

1
plt.savefig('foo.png', bbox_inches='tight')

3. 保存多个图形到PDF文件

可以使用matplotlib.backends.backend_pdf.PdfPages来保存多个图形到一个PDF文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import datetime
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

with PdfPages('multipage_pdf.pdf') as pdf:
plt.figure(figsize=(3, 3))
plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
plt.title('Page One')
pdf.savefig() # saves the current figure into a pdf page
plt.close()

plt.rc('text', usetex=True)
plt.figure(figsize=(8, 6))
x = np.arange(0, 5, 0.1)
plt.plot(x, np.sin(x), 'b-')
plt.title('Page Two')
pdf.savefig()
plt.close()

plt.rc('text', usetex=False)
fig = plt.figure(figsize=(4, 5))
plt.plot(x, x*x, 'ko')
plt.title('Page Three')
pdf.savefig(fig) # or you can pass a Figure object to pdf.savefig
plt.close()

# We can also set the file's metadata via the PdfPages object:
d = pdf.infodict()
d['Title'] = 'Multipage PDF Example'
d['Author'] = u'Jouni K. Sepp\xe4nen'
d['Subject'] = 'How to create a multipage pdf file and set its metadata'
d['Keywords'] = 'PdfPages multipage keywords author title subject'
d['CreationDate'] = datetime.datetime(2009, 11, 13)
d['ModDate'] = datetime.datetime.today()

4. 避免图形显示

如果不想显示图形,只想保存,可以使用非交互后端(如Agg):

1
2
3
4
5
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('myfig')

核心代码

以下是一个完整的示例代码,展示了如何保存图形并避免显示:

1
2
3
4
5
6
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [1, 4, 9])
plt.savefig('foo.png', bbox_inches='tight')

最佳实践

  • 保存顺序:如果需要同时显示和保存图形,应该先调用plt.savefig(),再调用plt.show(),因为plt.show()会清空图形。
  • 关闭图形:在大循环中使用plt.close(fig)关闭图形,避免占用过多内存。
  • Jupyter Notebook注意事项:在Jupyter Notebook中,plt.plot()plt.savefig()需要在同一个单元格中,否则保存的文件可能为空。

常见问题

1. 保存的图像为空

如果在调用plt.show()之后调用plt.savefig(),保存的图像会为空,因为plt.show()会清空图形。解决方法是先保存图像,再显示。

2. 内存占用过高

在大循环中绘制和保存图形时,如果不关闭图形,会占用大量内存。可以使用plt.close(fig)关闭图形。

3. Spyder中图形仍然显示

在Spyder中,即使使用非交互后端或不调用plt.show(),图形仍然可能显示。可以使用plt.switch_backend('Agg')或关闭Spyder偏好设置中的“启用支持”,并手动运行matplotlib.use('Agg')


Python中保存Matplotlib绘图为图像文件的方法
https://119291.xyz/posts/2025-04-18.python-matplotlib-save-plot-to-image/
作者
ww
发布于
2025年4月18日
许可协议