去除水平方向子图之间的分隔

Remove separation between subplots in horizontal direction

我有四个二维数组,我想使用 imshow 在四个子图中绘制。我希望删除这些子图之间的分隔,使子图相互接触,类似于 Matplotlib Documentation(倒数第二个示例)。我的尝试是

fig, axs = plt.subplots(2, 2, sharex='col', sharey='row', gridspec_kw={'hspace': 0, 'wspace': 0})
(ax1, ax2), (ax3, ax4) = axs

ax1.imshow(im1)
ax2.imshow(im2)
ax3.imshow(im3)
ax4.imshow(im4)

for ax in fig.get_axes():
    ax.label_outer()

plt.show()

这会产生

垂直方向的分隔似乎被正确移除了,但我仍然有水平方向的分隔。有谁知道我在这里也可以摆脱它吗?

您可以按照 answer of ImportanceOfBeingErnest 的思路进行尝试。我已经为您的问题准备了以下基于它的伪代码。您可以尝试一下,看看它是否适合您。

from matplotlib import gridspec

nrow, ncol = 2, 2

fig = plt.figure(figsize=(6,6)) 

gs = gridspec.GridSpec(nrow, ncol,
         wspace=0.0, hspace=0.0, 
         top=1.-0.5/(nrow+1), bottom=0.5/(nrow+1), 
         left=0.5/(ncol+1), right=1-0.5/(ncol+1)) 

ims = [im1, im2, im3, im4]

c = 0 # Counter for the ims array

for i in range(nrow):
    for j in range(ncol):
        ax= plt.subplot(gs[i,j])
        ax.imshow(ims[c])
        ax.set_xticklabels([])
        ax.set_yticklabels([])
        c += 1

for ax in fig.get_axes():
    ax.label_outer()