我正在尝试以一种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格式。但是很遗憾,仍然有很多空间未使用,如下图所示:
如何确保不同的子图具有相同的大小并占据A4纵向格式中的大部分可用空间?
答案 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