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

Seaborn绘制相关热力图:应用遮罩后未生成三角矩阵且出现灰色块

相关矩阵热力图灰色块问题解决方法

核心原因

灰色块本质是seaborn热力图对*缺失值(NaN)*的默认渲染样式,该问题大概率是原始数据存在空值,导致corr()计算相关系数时生成了NaN值,其次可能是样式配置冲突、遮罩逻辑异常。

解决步骤

  • 第一步:校验相关矩阵缺失值
    执行print(corrMatrix.isna().sum())查看是否存在NaN值,若存在可以先对原始数据做缺失值清洗,或者直接填充相关矩阵的缺失值:corrMatrix = df.corr().fillna(0)
  • 第二步:统一样式配置避免冲突
    多次调用seaborn的样式设置接口时,后调用的sns.set()会覆盖之前的样式配置,建议把所有样式参数统一在一处设置。
  • 第三步:可选参数调整
    可以在heatmap参数中主动指定缺失值的渲染颜色,比如na_color='white'和目标效果的白色背景对齐。

修正后参考代码

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

df = pd.DataFrame(data,columns=routing_names)
# 提前清洗原始数据空值 避免相关系数计算出现NaN
df = df.dropna()

# 统一配置样式
sns.set(
    style="white",
    rc={'figure.figsize':(39,39)}
)

corrMatrix = df.corr()
# 也可以选择直接填充相关矩阵的空值
# corrMatrix = corrMatrix.fillna(0)

mask = np.triu(np.ones_like(corrMatrix, dtype=bool))
cmap = sns.diverging_palette(220, 20, as_cmap=True)

sns.heatmap(
    corrMatrix,
    mask=mask, 
    cmap=cmap, 
    vmin=-1, 
    vmax=1, 
    center=0, 
    square=True, 
    linewidths=.5, 
    annot=True, 
    fmt='.1g', 
    annot_kws={"fontsize": 6},
    na_color='white' # 主动指定缺失值显示为白色
)
plt.subplots_adjust(left=0.15, bottom=0.3)

plt.savefig("output.svg")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:15:05