如何在不启用constrained_layout=True的情况下调整Gridspec子图的hspace?
问题描述
希望在不使用constrained_layout=True的前提下调整图中hspace的大小,当前代码如下:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np fig = plt.figure() # fig = plt.figure(constrained_layout=True) GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure= fig, hspace=0.9) subfigure_1= fig.add_subfigure(GridSpec[0,:]) subplots_1= subfigure_1.subplots(1,1) subfigure_2= fig.add_subfigure(GridSpec[1,:]) subplots_2= subfigure_2.subplots(1,1) plt.show()
启用constrained_layout=True时hspace虽能生效,但会引发其他问题,且该参数会禁用GridSpec的width_ratios属性。
解决方案
问题核心是Subfigure自带布局管理,会覆盖GridSpec的hspace设置,以下两种方法可解决:
方法1:直接使用add_subplot替代add_subfigure
放弃子figure结构,直接通过GridSpec添加子图,此时hspace设置会直接生效:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np fig = plt.figure() GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure=fig, hspace=0.9) subplots_1 = fig.add_subplot(GridSpec[0, :]) subplots_2 = fig.add_subplot(GridSpec[1, :]) plt.show()
方法2:保留Subfigure并关闭其自动布局
如果必须使用Subfigure,可以关闭每个子figure的自动布局功能,让GridSpec的hspace控制间距:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np fig = plt.figure() GridSpec = gridspec.GridSpec(ncols=1, nrows=2, figure=fig, hspace=0.9) subfigure_1 = fig.add_subfigure(GridSpec[0, :]) subfigure_1.tight_layout(False) # 关闭子figure的自动布局 subplots_1 = subfigure_1.subplots(1, 1) subfigure_2 = fig.add_subfigure(GridSpec[1, :]) subfigure_2.tight_layout(False) subplots_2 = subfigure_2.subplots(1, 1) plt.show()
两种方法都无需开启constrained_layout,同时能保留GridSpec的width_ratios等属性,实现垂直间距的调整。
内容的提问来源于stack exchange,提问作者Mo0nKizz
相关产品推荐
相关产品推荐

