如何为seaborn热图的不同行设置不同的颜色映射(colormap)
可以实现,核心思路是将数据集拆分后在同一画布上叠加绘制两次热图,分别设置不同配色即可,完整实现代码如下:
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 导入数据集 m = np.array([[ 0.7, 1.4, 0.2, 1.5, 1.7, 1.2, 1.5, 2.5], [ 1.1, 2.5, 0.4, 1.7, 2. , 2.4, 2. , 3.2], [ 0.9, 4.4, 0.7, 2.3, 1.6, 2.3, 2.6, 3.3], [ 0.8, 2.1, 0.2, 1.8, 2.3, 1.9, 2. , 2.9], [ 0.9, 1.3, 0.8, 2.2, 1.8, 2.2, 1.7, 2.8], [ 0.7, 0.9, 0.4, 1.8, 1.4, 2.1, 1.7, 2.9], [ 1.2, 0.9, 0.4, 2.1, 1.3, 1.2, 1.9, 2.4], [ 6.3, 13.5, 3.1, 13.4, 12.1, 13.3, 13.4, 20. ]]) data = pd.DataFrame(data = m) # 拆分数据集为前7行和最后一行 data_top = data.iloc[:-1, :] data_last = data.iloc[[-1], :] # 初始化画布 fig, ax = plt.subplots() # 绘制前7行热图,使用红色系配色 sns.heatmap( data_top, annot=True, cmap="Reds", vmin=data_top.min().min(), vmax=data_top.max().max(), cbar=False, ax=ax ) # 叠加绘制最后一行热图,使用蓝色系配色,可自行更换cmap参数调整配色 sns.heatmap( data_last, annot=True, cmap="Blues", vmin=data_last.min().min(), vmax=data_last.max().max(), yticklabels=[data.index[-1]], # 匹配原始行索引,避免标签错位 cbar=False, ax=ax ) plt.show()
关键说明
- 两次绘制都指定同一个
ax对象,保证热图位置完全对齐 - 分别为两部分数据设置独立的
vmin和vmax,避免最后一行数值过大导致前7行颜色梯度区分度低;若需要两部分使用统一的数值映射规则,可将两个vmin/vmax均设置为整个数据集的最小/最大值 - 可根据需求修改第二个
sns.heatmap的cmap参数,更换为你需要的配色方案
内容的提问来源于stack exchange,提问作者SOS
相关产品推荐
相关产品推荐

