Matplotlib-以A4格式拟合所有子图

时间:2018-10-31 16:59:34

标签: python matplotlib

我正在尝试以一种A4纵向格式安排6个子图。我正在使用以下代码:

variables = ['NEE', 'Qle', 'Qh', 'SoilMoist', 'LAI']
fig = plt.figure(figsize=(8.27,11.7)) #to get A4 portrait format
for i, variable in enumerate (variables):
    ax = plt.subplot2grid((5,1), (i,0))
    if variable == 'NEE' or variable == 'Qh' or variable == 'Qle':
        plt.plot(x,obs,c="black")
    if variable == 'LAI':
        plt.plot(df2['median'], c='blue')
    if variable == 'SoilMoist':
        plt.plot(time_ctr_ch, ctr_soil, c='lightsteelblue')
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

这将提供所有图以适合A4格式。但是很遗憾,仍然有很多空间未使用,如下图所示:

enter image description here

如何确保不同的子图具有相同的大小并占据A4纵向格式中的大部分可用空间?

1 个答案:

答案 0 :(得分:1)

这基本上可以归结为以下行为什么不起作用:

plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

如果我们遵循matplotlib在做什么:

plt.subplots_adjust在后​​台调用Figure.subplots_adjust。然后,这会更新figure.SubplotParams本身会调用一个名为update的函数。如果我们查看source code,将有一个方便的文档字符串:

def update(self, left=None, bottom=None, right=None, top=None,
           wspace=None, hspace=None):
    """
    Update the dimensions of the passed parameters. *None* means unchanged.
    """

因此,因为您要将None传递给subplots_adjust的参数,所以您实际上并没有更改其默认值(由matplotlibrc文件控制)的值

因此,您实际上需要为参数提供浮点值,例如:

plt.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95, wspace=0, hspace=0)

或者,您可以使用plt.tight_layout