使用 Matplotlib 创建多页 PDF

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,你将学习如何使用 Python Matplotlib 创建一个多页 PDF 文件。该 PDF 文件将包含几页不同的图表和元数据。你还将学习如何为 PDF 文件添加注释。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

首先,你需要导入创建 PDF 文件所需的库。在本实验中,我们将使用 Matplotlib 和 datetime 库。

import datetime
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages

创建 PdfPages 对象

接下来,你需要创建一个 PdfPages 对象,用于保存 PDF 文件的各个页面。你可以使用 with 语句来确保即使发生异常,PdfPages 对象也会在代码块结束时正确关闭。

with PdfPages('multipage_pdf.pdf') as pdf:

创建第一页

在这一步中,你将创建 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()
plt.close()

创建第二页

在这一步中,你将创建 PDF 文件的第二页。该页面将包含一个正弦波的图表。

plt.rcParams['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.attach_note("plot of sin(x)")  ## attach metadata (as pdf note) to page
pdf.savefig()
plt.close()

创建第三页

在这一步中,你将创建 PDF 文件的第三页。该页面将包含一条抛物线的图表。

plt.rcParams['text.usetex'] = False
fig = plt.figure(figsize=(4, 5))
plt.plot(x, x ** 2, 'ko')
plt.title('Page Three')
pdf.savefig(fig)  ## 或者你可以将一个 Figure 对象传递给 pdf.savefig
plt.close()

设置 PDF 文件的元数据

在这一步中,你将设置 PDF 文件的元数据。你可以设置 PDF 文件的标题、作者、主题、关键词以及创建/修改日期。

d = pdf.infodict()
d['Title'] = 'Multipage PDF Example'
d['Author'] = 'Jouni K. Seppänen'
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()

总结

在这个实验中,你学习了如何使用 Python Matplotlib 创建一个多页 PDF 文件。你还学习了如何为 PDF 文件附加元数据和注释。你可以使用这些技术来创建带有多个图表和注释的专业报告。