将所有打开的matplotlib数字一次保存在一个文件中

use*_*663 11 python matplotlib

我试图将已经创建的任意数量的matplotlib数字保存到1个文件中(PDF?).有没有办法用一个命令做到这一点?

far*_*rth 18

MatPlotLib目前支持将多个数字保存到单个pdf文件中.使用此功能的实现将是:

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

def multipage(filename, figs=None, dpi=200):
    pp = PdfPages(filename)
    if figs is None:
        figs = [plt.figure(n) for n in plt.get_fignums()]
    for fig in figs:
        fig.savefig(pp, format='pdf')
    pp.close()
Run Code Online (Sandbox Code Playgroud)

示例用法

首先创建一些数字,

import matplotlib.pyplot as plt
import numpy as np

fig1 = plt.figure()
plt.plot(np.arange(10))

fig2 = plt.figure()
plt.plot(-np.arange(3, 50), 'r-')
Run Code Online (Sandbox Code Playgroud)

默认情况下multipage会打印所有打开的数字,

multipage('multipage.pdf')
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是所有数字都呈现为矢量(pdf)图形.如果您希望图形使用光栅图形(即,如果文件太大而不是矢量),则rasterized=True可以在绘制具有多个点的数量时使用该选项.在这种情况下dpi,我包含的选项可能有用,例如:

fig3 = plt.figure()
plt.plot(np.random.randn(10000), 'g-', rasterized=True)

multipage('multipage_w_raster.pdf', [fig2, fig3], dpi=250)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我选择只打印fig2fig3.

  • 这对我来说是一个非常有用的功能。谢谢!但是,您没有使用“dpi”参数。我想它应该是:`fig.savefig(pp, dpi=dpi, format='pdf')` (2认同)