如何将Matplotlib图形保存为指定页面尺寸且带留白的PDF文件
如何将Matplotlib图形保存为指定页面尺寸且带留白的PDF文件
你说的这个需求太常见啦——就是想让生成的PDF里,图表既乖乖待在标准页面的正中间,周围还能留出舒服的空白,而不是硬生生撑满整个页面对吧?其实调整几个参数就能搞定,我给你两种方法,按需选就行:
方法一:快速添加留白(简单易用)
如果你不需要特别精确地控制页面尺寸和留白大小,直接用savefig的pad_inches参数就能快速实现。这个参数专门用来设置图形周围留白的尺寸,配合指定页面大小的话,图形会自动居中:
import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [3, 5, 4, 7] plt.scatter(x, y) plt.savefig( "example_with_margins.pdf", bbox_inches="tight", pad_inches=1, # 这里设置周围留白的大小,单位是英寸,数值越大留白越多 figsize=(8.27, 11.69) # 指定A4标准页面尺寸,你也可以换成其他尺寸 ) plt.close()
方法二:精确控制位置和尺寸(适合精细需求)
要是你想精准控制图形在页面上的位置、图形本身的大小,那可以用PdfPages配合调整坐标轴的位置来实现,步骤也很清晰:
import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages # 先定义标准页面尺寸,这里用A4纸的英寸尺寸 page_width, page_height = 8.27, 11.69 # 再设置你想要的图形本身的大小 fig_width, fig_height = 6, 4 # 创建画布并指定图形初始尺寸 fig, ax = plt.subplots(figsize=(fig_width, fig_height)) # 绘制你的散点图 x = [1, 2, 3, 4] y = [3, 5, 4, 7] ax.scatter(x, y) # 计算让图形居中的边距比例 left_margin_ratio = (page_width - fig_width) / page_width / 2 bottom_margin_ratio = (page_height - fig_height) / page_height / 2 # 用PdfPages来控制PDF页面布局 with PdfPages("example_centered.pdf") as pdf: # 把画布尺寸改成标准页面大小 fig.set_size_inches(page_width, page_height) # 调整坐标轴在画布上的位置,实现居中效果 ax.set_position([left_margin_ratio, bottom_margin_ratio, fig_width/page_width, fig_height/page_height]) # 保存图形 pdf.savefig(fig, bbox_inches="tight") plt.close()
这个方法里,我们先算出页面和图形的尺寸差,再转换成比例来设置坐标轴位置,这样图形就会正好居中在页面上,留白的大小也完全可控。
备注:内容来源于stack exchange,提问作者Dave




