我想在 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()
我正在尝试在热图的列之间添加额外的 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()