Python 某些子地块之间的间距,但不是所有地块之间的间距

Python 某些子地块之间的间距,但不是所有地块之间的间距,python,matplotlib,Python,Matplotlib,我有一个python中的matplotlib绘图,有3个子绘图,全部在1列中 我目前通过以下方式控制每个子地块的高度: gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3]) 我没有间隔通过: plt.subplots_adjust(hspace=0.0) 但我只想在第2行和第3行之间留出一些间距 在另一个答案中,我读到我可以做如下事情: gs1.update(left=0.05, right=0.48, wspace=0) 但我真的不明白发生了什

我有一个python中的matplotlib绘图,有3个子绘图,全部在1列中

我目前通过以下方式控制每个子地块的高度:

gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3])
我没有间隔通过:

plt.subplots_adjust(hspace=0.0)
但我只想在第2行和第3行之间留出一些间距

在另一个答案中,我读到我可以做如下事情:

gs1.update(left=0.05, right=0.48, wspace=0)

但我真的不明白发生了什么。有人能给我一些更多的信息吗?

当您调用update时,您正在将这些参数应用于该特定gridspec中的所有子地块。如果要为不同的子地块使用不同的参数,可以创建多个GridSpec。但是,您需要确保它们的大小正确且不重叠。一种方法是使用嵌套的GridSpec。由于底部两个图的总高度是顶部的6倍,因此外部gridspec的高度比为[1,6]

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec


def do_stuff(cell): #just so the plots show up
    ax = plt.subplot(cell)
    ax.plot()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.subplots_adjust(hspace=0.0)
#make outer gridspec
outer = gridspec.GridSpec(2, 1, height_ratios = [1, 6]) 
#make nested gridspecs
gs1 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = outer[0])
gs2 = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec = outer[1], hspace = .05)
for cell in gs1:
    do_stuff(cell)
for cell in gs2:
    do_stuff(cell)
plt.show()

在这种情况下,在第2行和第3行之间添加一个不可见的轴对象可能是最快的:

import matplotlib.pyplot as plt

gridspec = dict(hspace=0.0, height_ratios=[1, 1, 0.4, 3])
fig, axs = plt.subplots(nrows=4, ncols=1, gridspec_kw=gridspec)
axs[2].set_visible(False)
我查看了文档,发现不支持可变网格间距。因此,我们必须采取这样的变通办法


您可以使用gridspec定义一个没有内容的额外子地块,并根据您希望在其他子地块之间存在的空间为其提供一个较小的宽度比

spec = gridspec.GridSpec(ncols=4, nrows=1, figure=fig,width_ratios=[1,1,0.4,2])
ax00  = fig.add_subplot(spec[0, 0])
ax01  = fig.add_subplot(spec[0, 1])
ax03  = fig.add_subplot(spec[0, 3])
在我的示例中,02子地块仅用于宽度比为0.4:)的间距