我想在 matplotlib 热图的列之间添加额外的 space,我该怎么做?

I want to add extra space between the columns of matplotlib heatmap, how do I do it?

我正在尝试在热图的列之间添加额外的 space。现在,我已将热图的线宽设置为 18,这使得“图块”之间的间隙均匀,但我希望两列之间的间隙比水平间隙宽。

我查看了 matplitlib.collections 源代码并发现:

 def set_linewidth(self, lw):
        """
        Set the linewidth(s) for the collection.  *lw* can be a scalar
        or a sequence; if it is a sequence the patches will cycle
        through the sequence

        Parameters
        ----------
        lw : float or sequence of floats
        """
        if lw is None:
            lw = mpl.rcParams['patch.linewidth']
            if lw is None:
                lw = mpl.rcParams['lines.linewidth']
        # get the un-scaled/broadcast lw
        self._us_lw = np.atleast_1d(np.asarray(lw))

        # scale all of the dash patterns.
        self._linewidths, self._linestyles = self._bcast_lwls(
            self._us_lw, self._us_linestyles)
        self.stale = True

虽然我对这个功能一无所知。我试图给它一个宽度列表而不是一个变量,但线宽只注册列表中的第一个元素。

编辑: 非常感谢 JohanC 提供的解决方案。 对于那些提问的人,这是我生成图片中热图的代码。

self.axes[i].pcolormesh(data,  cmap = "YlGnBu", edgecolor=BG_COLOUR, \
      linewidths=18, vmin=0.0, vmax=1.0)

以下代码是JohanC方案的应用

self.axes[sel].pcolormesh(data,  cmap = "YlGnBu", vmin=0.0, vmax=1.0)
for j in range(data.shape[0] + 1):
     self.axes[sel].axhline(j, color=BG_COLOUR, lw=20)
for j in range(data.shape[1] + 1):
     self.axes[sel].axvline(j, color=BG_COLOUR, lw=60)

您可以显式绘制不同宽度的水平线和垂直线:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

data = np.random.rand(5, 2)
ax = sns.heatmap(data)
for i in range(data.shape[0] + 1):
    ax.axhline(i, color='white', lw=20)
for i in range(data.shape[1] + 1):
    ax.axvline(i, color='white', lw=60)
plt.show()