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

使用seaborn的clustermap做层次聚类时如何遮盖下三角矩阵

seaborn clustermap下三角掩码失效解决方案

失效核心原因

sns.clustermap的mask参数不生效的核心原因是:clustermap默认开启row_cluster和col_cluster参数,会基于层次聚类结果重新调整矩阵的行、列展示顺序,提前生成的下三角掩码是匹配原始未排序的相关系数矩阵的,行列顺序变化后掩码位置和实际矩阵元素无法对应,自然无法达到预期的遮盖效果。


适配不同场景的解决方案

场景1:不需要调整行列顺序

如果不需要聚类重排行列,仅需要保留clustermap的可视化布局,直接关闭行列聚类即可,原有掩码可直接生效:

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

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.tril(np.ones_like(corr))

# 关闭行列聚类,行列顺序和原始矩阵完全一致
sns.clustermap(corr, cmap="Blues", mask=mask, figsize=(6,6),
               row_cluster=False, col_cluster=False)
plt.show()

场景2:需要保留聚类重排效果

如果需要保留聚类后的行列排序逻辑,需要先获取clustermap重排后的矩阵,再生成对应下三角掩码应用到热力图上:

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

corr = np.corrcoef(np.random.randn(10, 200))

# 先初始化clustermap,暂不传入mask参数
g = sns.clustermap(corr, cmap="Blues", figsize=(6,6))
# 获取聚类重排后的相关系数矩阵
reordered_corr = g.data2d
# 生成适配重排后矩阵的下三角掩码
new_mask = np.tril(np.ones_like(reordered_corr))
# 将新掩码应用到热力图图层
g.ax_heatmap.collections[0].set_mask(new_mask)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:06:04