为什么 matplotlib savefig 尺寸与 Figsize 尺寸不匹配?

问题描述 投票:0回答:1

我正在尝试为出版物制作一个精确尺寸的模型。

fig,axn = plt.subplots(2,2, figsize=(8,8))

x = [2,4,6,8]
y = [10,3,20,4]

sns.scatterplot(x=x, y=y, ax=axn[0,0])


plt.savefig(r"filepath\test.png"
           )

这给了我一个尺寸为 5 英寸 x 5 英寸的 png 文件,边缘周围有很多空白

enter image description here

如果我使用以下 savefig 调用:

fig,axn = plt.subplots(2,2, figsize=(8,8))

x = [2,4,6,8]
y = [10,3,20,4]

sns.scatterplot(x=x, y=y, ax=axn[0,0])


plt.savefig(r"filepath\test.png",
            bbox_inches="tight"
           )

我得到的图像没有空白,但现在尺寸为 6.7 英寸 x 6.4 英寸

enter image description here

我在这个主题上找到的所有帖子都表明添加“bbox_inches =“tight””会删除空格并保留Figsize尺寸,但这似乎对我不起作用。

是否需要调整(猜测)figsize 尺寸,以便在删除空白后给出正确的绝对图像大小?

提前致谢

matplotlib seaborn
1个回答
0
投票

我建议使用以下任一方法来更好地控制,而不是使用

tight_layout
bbox_inches="tight"

简单但不太灵活的选项是使用约束布局。请在此处查看指南

fig, axn = plt.subplots(2, 2, figsize=(8,8), layout='constrained')
x = [2,4,6,8]
y = [10,3,20,4]
sns.scatterplot(x=x, y=y, ax=axn[0,0])
fig.savefig(r"filepath\test.pdf")

更好的是在保存之前使用

subplots_adjust
手动指定间距。阅读文档以了解这些值的工作原理。

fig, axn = plt.subplots(2, 2, figsize=(8,8))
x = [2,4,6,8]
y = [10,3,20,4]
sns.scatterplot(x=x, y=y, ax=axn[0,0])
fig.subplots_adjust(left=0.05, bottom=0.05, right=0.05, top=0.05,
                    wspace=0.1, hspace=0.1)
fig.savefig(r"filepath\test.pdf")

您可能还想以矢量格式保存图像,例如 SVG 或 PDF,以获得高质量图像。

© www.soinside.com 2019 - 2024. All rights reserved.