Python 使用子图调整图形周围的空间

Python 使用子图调整图形周围的空间,python,python-2.7,matplotlib,figure,subplot,Python,Python 2.7,Matplotlib,Figure,Subplot,我正在使用Matplotlib并努力在我正在绘制的包含子地块网格的图形周围获得准确的空白量 要求:能够选择所有子图的纵横比(它们都相同),准确定义子图与(保存的)图形边缘的顶部、底部和左侧之间的空白量。右边我不需要任何额外的空间 到目前为止,我的代码包含以下内容: import matplotlib.pyplot as plt fig, axes = plt.subplots(ncols=6, nrows=2, sharex=True, sha

我正在使用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=()
子地块的纵横比是错误的。如果我这样做,那么只要我更改
子批次中的参数,纵横比就会改变。显然,
左不能>=右
下不能>=上
。如果我将top定义为0以外的任何值,它会将所有子图向下压缩到图形底部的一条线


如果我指定
bbox\u inches='tight'
则它会在底部和左侧截断我定义的空白,但如果我不指定它,则我会在左侧保留多余的空白,因为我无法清除它(使用
子图调整时,右将,
的值将作为图形宽度和高度的分数提供。此外,所有值都是从图形的左边缘和下边缘测量的。这就是为什么
不能低于
left
bottom
。典型设置为:

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)
hspace
wspace
被计算为一个面板轴宽度和高度的分数,因此它们的绝对值取决于图形尺寸、外部边距和子地块的数量,这需要稍微多一些数学来进行微调