如何为 seaborn 热图使用相同的颜色条?
How to use the same colorbar for seaborn heatmaps?
我有三个子图,单独绘制时颜色条略有不同
我绘制的热图如下:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize = (20,10),sharey=True)
sns.heatmap(df,cmap=colormap,ax = axes[0])
sns.heatmap(df2,cmap=colormap,ax = axes[1])
sns.heatmap(df3,cmap=colormap,ax = axes[2])
我知道我可以为前两个图设置 cbar = False
,但是由于它们的颜色条略有不同,第三个颜色条不会代表所有子图。我的第一个子图的范围是 0-35,第二个是 0-36,第三个是 0-37。我想要一个包含 0-37 范围的颜色条,但显然如果我只做 cbar = False
.
,颜色将对应于前两个子图的错误值
我如何设置我的子图以仅包含一个适用于所有子图的颜色条,而不是三个?很抱歉缺少数字,我现阶段无法分享它们。
I want a colorbar that encompasses the 0-37 range but obviously the colors will correspond to the wrong values for the first two subplots if I just do cbar=False
.
除了在前两个热图上设置 cbar=False
之外,将所有热图锚定到相同的颜色图范围:
在每个热图上设置 vmin
和 vmax
:
sns.heatmap(df, ax=axes[0], vmin=0, vmax=37, cbar=False)
sns.heatmap(df2, ax=axes[1], vmin=0, vmax=37, cbar=False)
sns.heatmap(df3, ax=axes[2], vmin=0, vmax=37)
# ^ ^
或使用 matplotlib.colors.Normalize
创建 min/max norm
:
import matplotlib.colors as mcolors
norm = mcolors.Normalize(0, 37)
sns.heatmap(df, ax=axes[0], norm=norm, cbar=False)
sns.heatmap(df2, ax=axes[1], norm=norm, cbar=False)
sns.heatmap(df3, ax=axes[2], norm=norm)
# ^
注意,如果你想自动提取vmin
和vmax
,ravel
和stack
数据:
values = np.hstack([d.values.ravel() for d in [df, df2, df3]])
norm = mcolors.Normalize(values.min(), values.max())
我有三个子图,单独绘制时颜色条略有不同
我绘制的热图如下:
fig, axes = plt.subplots(nrows=1, ncols=3, figsize = (20,10),sharey=True)
sns.heatmap(df,cmap=colormap,ax = axes[0])
sns.heatmap(df2,cmap=colormap,ax = axes[1])
sns.heatmap(df3,cmap=colormap,ax = axes[2])
我知道我可以为前两个图设置 cbar = False
,但是由于它们的颜色条略有不同,第三个颜色条不会代表所有子图。我的第一个子图的范围是 0-35,第二个是 0-36,第三个是 0-37。我想要一个包含 0-37 范围的颜色条,但显然如果我只做 cbar = False
.
我如何设置我的子图以仅包含一个适用于所有子图的颜色条,而不是三个?很抱歉缺少数字,我现阶段无法分享它们。
I want a colorbar that encompasses the 0-37 range but obviously the colors will correspond to the wrong values for the first two subplots if I just do
cbar=False
.
除了在前两个热图上设置 cbar=False
之外,将所有热图锚定到相同的颜色图范围:
在每个热图上设置
vmin
和vmax
:sns.heatmap(df, ax=axes[0], vmin=0, vmax=37, cbar=False) sns.heatmap(df2, ax=axes[1], vmin=0, vmax=37, cbar=False) sns.heatmap(df3, ax=axes[2], vmin=0, vmax=37) # ^ ^
或使用
matplotlib.colors.Normalize
创建 min/maxnorm
:import matplotlib.colors as mcolors norm = mcolors.Normalize(0, 37) sns.heatmap(df, ax=axes[0], norm=norm, cbar=False) sns.heatmap(df2, ax=axes[1], norm=norm, cbar=False) sns.heatmap(df3, ax=axes[2], norm=norm) # ^
注意,如果你想自动提取vmin
和vmax
,ravel
和stack
数据:
values = np.hstack([d.values.ravel() for d in [df, df2, df3]])
norm = mcolors.Normalize(values.min(), values.max())