围绕带有子图的图形调整 space

Adjusting space around figure with subplots

我正在使用 Matplotlib 并努力在我正在绘制的包含子图网格的图形周围获得正确数量的白色space。

要求:能够选择所有子图的纵横比(都是一样的),准确定义子图与图的上、下、左之间有多少白色space (保存的)图形边缘。我不需要右边的任何额外的space。

我目前的代码包含以下内容:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=6, nrows=2, sharex=True, 
                         sharey=True, figsize=(16,8))

axes[0,0].plot(x,y)
etc...

plt.subplots_adjust(hspace=1.0, wspace=0.02, bottom=0.17, left=0.075, top=0.18)

plt.savefig('Fig1_matplot.pdf', bbox_inches='tight')

实际上,如果我不指定 figsize=() 子图的纵横比是错误的。如果我这样做,那么每当我更改 subplots_adjust() 中的参数时,纵横比都会发生变化。显然 left cannot be >= rightbottom cannot be >= top。如果我确实将 top 定义为 0 以外的任何值,它会将所有子图完全压缩到图形底部的一行。

如果我指定 bbox_inches='tight' 那么它会在底部和左侧切断我定义的白色 space,但是如果我不指定它那么我就会留下多余的白色 space 在右边,因为我无法摆脱它(右边是 <= 左边)。

我有点卡住了,任何帮助将不胜感激。

干杯。

当使用 subplots_adjust 时,leftrightbottomtop 的值将作为图形宽度的分数提供,并且高度。此外,所有值都是从图的左边缘和下边缘开始测量的。这就是为什么righttop不能低于leftbottom的原因。典型的设置是:

plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)

另一方面,如果您想提供白色 space 作为以英寸为单位的绝对值,则必须除以图形的宽度和高度。例如,在您的情况下,可以通过以下方式实现所有边缘周围 1 英寸的边距:

plt.subplots_adjust(left=1/16.0, right=1-1/16.0, bottom=1/8.0, top=1-1/8.0)

为了更通用,我通常将图形的宽度和高度参数化为:

figw, figh = 16.0, 8.0
fig, axes = plt.subplots(ncols=6, nrows=2, sharex=True, sharey=True,
                         figsize=(figw, figh))
plt.subplots_adjust(left=1/figw, right=1-1/figw, bottom=1/figh, top=1-1/figh)

hspacewspace 被计算为一个面板的轴宽度和高度的分数,因此它们的绝对值取决于图形尺寸、外边距和子图的数量,其中微调需要更多的数学知识。