You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn聚类热图设置:等值绝对值对应同一颜色

实现聚类热图中绝对值相等值同色的方案

针对你需要的“相关性正负无关,仅关注偏离0的程度,绝对值相等值显示同一颜色”的需求,这里提供两种实用实现方式:

方式一:聚类基于原始相关性,热图颜色基于绝对值

适合需要保留原始相关性正负用于聚类,但视觉上只突出强度的场景:

  1. 导入依赖库
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize
  1. 自定义归一化器
    这个归一化器会把正负值转换成对应的绝对值,实现同绝对值同颜色映射:
class SymmetricAbsNorm(Normalize):
    def __call__(self, value, clip=None):
        abs_val = np.abs(value)
        return super().__call__(abs_val, clip=clip)
  1. 生成/加载相关性数据并绘制聚类热图
# 示例:生成随机相关性矩阵(替换为你的真实数据)
corr = np.corrcoef(np.random.randn(10, 10))

# 创建对称颜色映射:中心为浅色,正负方向使用同一深色渐变
cmap = sns.diverging_palette(255, 255, s=75, l=50, center="light", as_cmap=True)

# 初始化自定义归一化器,范围0-1对应绝对值0-1
norm = SymmetricAbsNorm(vmin=0, vmax=1)

# 绘制聚类热图,聚类逻辑基于原始相关性
g = sns.clustermap(corr, cmap=cmap, norm=norm)

# 调整颜色条刻度,显示正负对应关系
g.cax.set_yticks([0, 0.25, 0.5, 0.75, 1])
g.cax.set_yticklabels(["-1", "-0.75", "-0.5", "-0.25", "0", "0.25", "0.5", "0.75", "1"])
g.cax.set_ylim(0, 1)

plt.show()

方式二:聚类和热图均基于绝对值

完全契合“正负无关紧要”的需求,聚类和视觉呈现都只关注相关性强度:

  1. 导入依赖库
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
  1. 处理数据并绘制
# 示例:生成随机相关性矩阵(替换为你的真实数据)
corr = np.corrcoef(np.random.randn(10, 10))
# 取相关性的绝对值
corr_abs = np.abs(corr)

# 创建从浅到深的颜色映射,中心为0(浅色),强度越高颜色越深
cmap = sns.light_palette("darkred", as_cmap=True)

# 绘制聚类热图,聚类逻辑基于相关性强度(绝对值)
g = sns.clustermap(corr_abs, cmap=cmap, vmin=0, vmax=1)

# 修改颜色条刻度,明确标注正负对应数值
g.cax.set_yticks([0, 0.25, 0.5, 0.75, 1])
g.cax.set_yticklabels(["0", "±0.25", "±0.5", "±0.75", "±1"])

plt.show()

关键说明

  • 颜色映射可根据喜好替换:比如把darkred换成navy、purple等,或用sns.diverging_palette调整色调、饱和度
  • 若你的相关性范围不是[-1,1],只需修改vmin和vmax参数即可适配

内容的提问来源于stack exchange,提问作者Luis_12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:30:52