使用 make_axes_locatable 时如何删除 matplotlib 子图中的填充

How to remove padding in matplotlib subplots when using make_axes_locatable

我正在尝试使用 plt.subplots 在稍微非矩形的数据集(x 轴范围小于 y 轴范围)上创建一个 4x2 图,并使用 make_axes_locatable 将颜色条分配给让颜色条漂亮并且与子图齐平。我总是在两个子图列之间得到巨大的 paddings/margins,我怀疑它们来自颜色条...我已经尝试了很多 Whosebug 问题中的多种东西(例如使用 fig.subplots_adjust()constrained_layout=True等)但无济于事。两列之间的边距非常大(见下面的 img)并使图像不可读...... 任何输入将不胜感激! 用于重现问题的代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable

data = np.random.random((10, 6))

fig, axs = plt.subplots(nrows=4, ncols=2, figsize=(16, 8), sharex=True, sharey=False, constrained_layout=True)
for idx in range(4):
    # plot image
    im1 = axs[idx, 0].imshow(data, cmap=cm.coolwarm)
    im2 = axs[idx, 1].imshow(data, cmap=cm.viridis)
    # make colorbars
    ax1_divider = make_axes_locatable(axs[idx, 0])
    cax1 = ax1_divider.append_axes("right", size="2%", pad=0.05)
    cb1 = fig.colorbar(im1, cax=cax1, orientation="vertical")
    ax2_divider = make_axes_locatable(axs[idx, 1])
    cax2 = ax2_divider.append_axes("right", size="2%", pad=0.05)
    cb2 = fig.colorbar(im2, cax=cax2, orientation="vertical")

您正在绘制多个图像(默认情况下它试图保持相同的纵横比),其中高度大于宽度。因此,图片的总高度 > 图片的总宽度。

因此,减少列之间的白色间距的一种方法是减少图形的宽度。

尝试这样设置:

fig, axs = plt.subplots(nrows=4, ncols=2, figsize=(4, 8), sharex=True, sharey=False, constrained_layout=True)