如何将具有自动高度的 matplotlib 图形保存为 pdf

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

我有以下问题:我想保存一个具有特定宽度的图形,但自动确定其高度。让我们看一个例子:

import matplotlib.pyplot as plt
import numpy as np

fig,ax=plt.subplots(figsize=(5,5),layout='constrained')
x=np.linspace(0,2*np.pi)
y=np.sin(x)
ax.set_aspect('equal')
ax.plot(x,y)
plt.show()
fig.savefig('test.pdf',format='pdf')

在这里,我希望图形为 5 英寸宽,我希望轴用尽所有水平空间,但我并不真正关心确切的垂直尺寸。基本上完全正确,

plt.show()
给了我什么:

plt.show()输出

fig.savefig()
在图的顶部和下方给了我很多空白(显然,因为我已经定义了
figsize=(5,5)
)。使用选项
bbox_inches='tight'
几乎可以实现我想要的效果,但它会重新调整图形的 x 方向的大小(在本例中为大约 5.1 英寸)。

因此,我没有找到任何方法来保存这个宽度恰好为 5 英寸但自动确定高度的图形。我能实现我想要的唯一方法是手动减小Figsize,直到我看到图形开始在x方向缩小。

python numpy matplotlib pdf savefig
1个回答
0
投票
import matplotlib.pyplot as plt
import numpy as np

# plot and create figure
fig, ax = plt.subplots(layout='constrained')
x = np.linspace(0, 2*np.pi)
y = np.sin(x)
ax.set_aspect('equal')
ax.plot(x, y)

# get current size and bbox
bbox = fig.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
width_inches = 5  # desired width
height_inches = width_inches * (bbox.height / bbox.width)

# save
fig.set_size_inches(width_inches, height_inches)
fig.savefig('test.pdf', format='pdf')

这种方法获取图形的实际渲染尺寸,在保持宽高比的情况下根据所需的宽度计算适当的高度,暂时调整图形大小以进行保存,最后在保存后恢复原始尺寸。

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