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
相关产品推荐
相关产品推荐

