Python 从Matplotlib图中删除子批次的列/行

Python 从Matplotlib图中删除子批次的列/行,python,matplotlib,Python,Matplotlib,我有一个库函数,它使用pyplot生成一个带有5x5子地块网格的图形。在某些情况下,我希望删除一些列或行,以便在某些特定场景中为更有利的子地块提供更多空间 我发现我可以在事后使用fig.delaxes(ax)删除子地块。 然而,这只会在子地块所在的位置留下一个空白,即使我以这种方式删除了整个行或列的子地块,也可以更改子地块之间的间距,重新绘制或使用图tight_layout() 有没有办法让Matplotlib来填补这些空白? 我可能会编辑生成图形的代码以跳过有问题的行/列,但如果可能的话,我希

我有一个库函数,它使用pyplot生成一个带有5x5子地块网格的图形。在某些情况下,我希望删除一些列或行,以便在某些特定场景中为更有利的子地块提供更多空间

我发现我可以在事后使用
fig.delaxes(ax)
删除子地块。 然而,这只会在子地块所在的位置留下一个空白,即使我以这种方式删除了整个行或列的子地块,也可以更改子地块之间的间距,重新绘制或使用
图tight_layout()

有没有办法让Matplotlib来填补这些空白?
我可能会编辑生成图形的代码以跳过有问题的行/列,但如果可能的话,我希望避免这种情况。

当然,您可以在事后设置高度比:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(3, 5, constrained_layout=True)

for i in range(5):
    axs[1, i].set_xticks([])
    axs[1, i].set_yticks([])

gs = axs[0, 0].get_subplotspec().get_gridspec()
gs.set_height_ratios([1, 0.0001, 1])
plt.tight_layout()

for ax in axs[1, :]:
    fig.delaxes(ax)
。。。这并不完美,但非常接近


谢谢!我必须调用
gs.set\u height\u ratios()
(在我的例子中,对于图形中的每个剩余轴,也必须在循环中调用
gs.set\u width\u ratios()
。这可能是因为我有一个旧版本的matplotlib,或者因为我的子图是按照
plt.add\u subplot()
顺序生成的,而不是使用
plt.subplot()
。理想情况下,您的函数不会生成轴,而是采用轴参数。这样,您的布局就更加灵活。是的,不生成那些不需要的轴会更好,但生成轴的函数a)相当复杂,b)是库的一部分,并且被许多其他代码使用。因此,我可以快速破解正在使用它的代码,但如果我开始修改生成图形的函数,我将不得不花费更多的时间来确定需要更改的内容,并且更加小心不要在任何其他场景中破坏它。。。现实生活中的问题。