仅更改已保存绘图的 Spyder 和 Matplotlib 图形大小

sai*_*kon 5 python matplotlib spyder

我想以一种尺寸查看 Spyders IPython 控制台内的 matplotlib 图,并将数字保存到不同尺寸的多页 PDF 中。

目前我将图形大小设置如下:

plt.rc('axes', grid=True)
plt.rc('figure', figsize=(12, 8))
plt.rc('legend', fancybox=True, framealpha=1)
Run Code Online (Sandbox Code Playgroud)

然后我绘制一些图形并将它们保存到一个列表中,以便稍后保存 PDF。这在单独使用时效果很好。这些图的大小适合在 Spyder IPython 控制台中查看。

在我的脚本结束时,我有一个循环来遍历我想要保存的每个图形。在这里,我想准确设置布局和图形大小,以便在 A3 纸上更好地打印。

with PdfPages('multi.pdf') as pdf:
    for fig in figs:
        fig.tight_layout()
        fig.set_size_inches(420/25.4, 297/25.4)
        pdf.savefig(figure=fig)
Run Code Online (Sandbox Code Playgroud)

输出 PDF 就像我想要的那样,但问题在于 Spyder 中显示的图。保存时更改图形大小也会影响在 Spyder 中查看的绘图。使用 A3 的大小会使绘图变得太大。

所以问题是:如何在不更改 Spyder 中显示的图形大小的情况下更改保存的 PDF 图形的大小?

sai*_*kon 0

感谢@ImportanceOfBeingErnest 指出解决方案。

我采用了一个允许我设置的解决方案plt.rc在开始时根据自己的喜好进行设置,然后在将数据导出为 PDF 后恢复到设置值。

首先我设置我使用的值:

plt.rc('axes', grid=True)
plt.rc('figure', figsize=(12, 8))
plt.rc('legend', fancybox=True, framealpha=1)
Run Code Online (Sandbox Code Playgroud)

有了这些,我可以仅使用默认值绘制我需要的内容。然后我使用以下命令创建 PDF:

with PdfPages('multi.pdf') as pdf:
    for fig in figs:
        fig.set_size_inches(420/25.4, 297/25.4)
        pdf.savefig(figure=fig, bbox_inches='tight')
        fig.set_size_inches(plt.rcParams.get('figure.figsize'))
Run Code Online (Sandbox Code Playgroud)

这样我就可以获得fig.tight_layout()导出的图形的唯一值,并将图形大小恢复到之前设置的默认值。