用子块调整图形周围的空间

2024-05-18 21:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

要求:能够选择所有子块的宽高比(它们都是相同的),精确定义子块和(保存的)图形边缘的顶部、底部和左侧之间有多少空白。我不需要额外的空间在右边。

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

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',那么它会在底部和左侧截断我定义的空白,但是如果我不指定它,那么我会在右侧留下多余的空白,因为我无法去掉它(right将是<;=left)。

我有点困了,任何帮助都会很感激的。

干杯。


Tags: true图形定义toppltleft空白子块
1条回答
网友
1楼 · 发布于 2024-05-18 21:23:53

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

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

另一方面,如果要以英寸为绝对值提供空白,则必须除以图形的宽度和高度。例如,在您的情况下,可以通过以下方法在所有边缘周围获得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计算为一个面板的轴宽和轴高的分数,因此它们的绝对值取决于图形尺寸、外部边距和子块的数量,这将需要更多的数学运算来进行微调。

相关问题 更多 >

    热门问题