gpt4 book ai didi

python - 设置 matplotlib 子图的绝对大小

转载 作者:行者123 更新时间:2023-12-05 08:45:50 24 4
gpt4 key购买 nike

我知道如何使用 gridspec 或 subplots_adjust 设置图中子图的相对大小,我知道如何使用 figsize 设置图的大小。我的问题是设置子图的绝对大小。

用例:我正在制作两个单独的图,它们将保存为学术论文的 pdf 文件。一个有两个子图,一个有三个子图(两种情况都在 1 行中)。我需要 5 个子图中的每一个在生成的 PDF 中具有完全相同的大小和完全相同的字体大小(轴标签、刻度标签等)。在下面的示例中,字体大小相同,但子图不同。如果我使生成的 PDF 的高度相同(因此轴),则 3-subplots.pdf 上的字体小于 2-subplots.pdf 的字体。

MWE:

import matplotlib.pyplot as plt

subplots = [2, 3]
for i, cols in enumerate(subplots):

fig, ax = plt.subplots(1, cols, sharey=True, subplot_kw=dict(box_aspect=1))

for j in range(cols):
ax[j].set_title(f'plot {j*cols}')
ax[j].set_xlabel('My x label')
ax[0].set_ylabel('My y label')

plt.tight_layout()
plt.savefig(f'{cols}-subplots.pdf', bbox_inches='tight', pad_inches=0)
plt.show()

输出: output

最佳答案

我更喜欢使用 fig.add_axes([left, bottom, width, height]) 它可以让您精确控制每个子图的大小和位置。 leftbottom 决定子图的位置,而 widthheight 决定大小。所有数量都是图形宽度和高度的分数,因此它们都在 0 和 1 之间 float 。

一个例子:

fig = plt.figure(figsize=(8.3, 11.7))
axs = {
"ax1": fig.add_axes([0.2, 0.7, 0.6, 0.2], xticklabels=[]),
"ax2": fig.add_axes([0.2, 0.49, 0.6, 0.2], xticklabels=[]),
"ax3": fig.add_axes([0.2, 0.28, 0.6, 0.2]),
}

有了这个,我在 A4 尺寸的图形中创建了 3 个子图,每个子图的宽度为 0.6x8.3,高度为 0.2x11.7。它们之间的间距为 0.1x11.7。 "ax1""ax2" 不显示 xticklabels,以便我稍后可以为它们设置共享 x 刻度。

您可以查看 matplotlib API 引用以获取更多信息 https://matplotlib.org/stable/api/figure_api.html

关于python - 设置 matplotlib 子图的绝对大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71517614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com