在matplotlib中去除子图马赛克之间的间隙

2 投票
1 回答
52 浏览
提问于 2025-04-12 00:49

我该如何去掉马赛克图中子图之间的空隙?传统的方法在马赛克图上不管用:

plt.subplots_adjust(wspace=0, hspace=0)

我也试过用 gridspec_kw,但是没成功。

import matplotlib.pyplot as plt
import numpy as np

ax = plt.figure(layout="constrained").subplot_mosaic(
    """
    abcde
    fghiX
    jklXX
    mnXXX
    oXXXX
    """,
    empty_sentinel="X",
    gridspec_kw={
        "wspace": 0,
        "hspace": 0,
    },
)


for k,ax in ax.items():
    print(ax)
    #ax.text(0.5, 0.5, k, transform=ax.transAxes, ha="center", va="center", fontsize=8, color="darkgrey")
    ax.set_xticklabels([])
    ax.set_yticklabels([])
    ax.tick_params(length = 0)

这段代码生成了:

在这里输入图片描述

1 个回答

4

这个问题不是因为 subplot_mosaic 引起的,而是因为你指定了一个 layout(布局)。如果你使用了限制性布局(constrained layout)或紧凑布局(tight layout),那么布局管理器会覆盖你自己做的调整。

如果你去掉布局管理器,下面的方法就都能正常工作:

  • gridspec_kw

    fig = plt.figure() # without layout param
    ax = fig.subplot_mosaic(
        """
        abcde
        fghiX
        jklXX
        mnXXX
        oXXXX
        """,
        empty_sentinel="X",
        gridspec_kw={
            "wspace": 0,
            "hspace": 0,
        },
    )
    
  • subplots_adjust

    fig = plt.figure() # without layout param
    ax = fig.subplot_mosaic(
        """
        abcde
        fghiX
        jklXX
        mnXXX
        oXXXX
        """,
        empty_sentinel="X",
    )
    fig.subplots_adjust(wspace=0, hspace=0)
    

撰写回答