Python Seaborn 如何设置热力图仅展示指定阈值的正负强相关性
相关性筛选逻辑调整方案
核心改动思路
原有代码的筛选规则仅保留了相关系数高于+0.8的强正相关值,完全漏掉了≤-0.8的强负相关场景。只需要把筛选条件改成逐元素判断:只要满足≥+0.8 或者 ≤-0.8 任一阈值就保留原始相关值,不满足的位置直接置为空值(NaN),Seaborn热力图就会自动跳过空值区域,只画出符合要求的强相关块。
注意:逐元素做布尔判断的时候,必须用按位或运算符|连接两个独立判断条件,每个条件都要单独加括号,不能直接用Python原生的or连接两个条件,否则会触发维度不匹配的运行错误。
可直接复用的修改后代码
import matplotlib.pyplot as plt import seaborn as sns # 计算数据集的全量相关系数矩阵 corr = df2.corr() # 核心逻辑修改:同时匹配强正、强负相关的筛选要求 kot = corr[(corr >= 0.8) | (corr <= -0.8)] plt.figure(figsize=(60, 40)) sns.heatmap( kot, cmap="RdBu_r", vmin=-1, vmax=1, center=0, mask=kot.isna() ) plt.show()
配套优化建议
- 色阶适配:原代码使用的
Greens是单方向正向色阶,无法对负相关数值做视觉区分,强负相关的位置会和空值的白色背景混淆;替换为RdBu_r这类发散型双色阶后,正相关、负相关会呈现明确的色彩差异,配合对称的色阶上下限,两类强相关的识别度会大幅提升。 - 无意义自相关过滤:相关系数矩阵中,每个变量与自身的相关值固定为1.0,会自动符合≥0.8的筛选条件被展示,如果不需要展示这类无信息的自相关网格,可以在构造完
kot矩阵后加入一行代码将对角线置为空值:import numpy as np np.fill_diagonal(kot.values, np.nan) - 阈值灵活调整:后续如果需要修改强相关的判定标准,只需要同步修改两个判断条件中的数值即可,比如将阈值放宽到0.7,就把条件调整为
corr >= 0.7和corr <= -0.7,无需改动其他逻辑。
内容的提问来源于stack exchange,提问作者exmatelote
相关产品推荐
相关产品推荐

