赞
踩
近日研究一下热力图,参考一些博主代码做了一些优化,实现矩阵的下三角显示,代码如下:
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
print("========================================================================")
data = pd.DataFrame([[1, 6, 7, 5, 1], [2, 10, 8, 3, 4], [3, 4, 0, 10, 2]], columns=['val1', 'val2', 'val3', 'val4', 'val5'])
print(data)
print("========================================================================")
corrmat = data.corr() # 返回一个相关系数矩阵,默认是皮尔逊系数(计算线性相关的数据),
# 非线性相关数据可采用
# kendall:这个参数用于计算肯德尔相关系数,可以度量两个变量之间的顺序关系,它可以处理非线性数据,但是它不能处理缺失值
# spearman:这个参数用于计算斯皮尔曼相关系数。斯皮尔曼相关系数主要用于度量两个变量之间的相关性,它也可以处理非线性数据,但是它不能处理缺失值
print(corrmat)
print("========================================================================")
mask = np.zeros(corrmat.shape, dtype=bool) # corrmat.shape 是 corrmat的行数和列数,np.zeros根据这个行列数生成一个bool类型矩阵
print(mask)
print("========================================================================")
print(np.triu_indices_from(mask)) # 获取矩阵上三角的下标
print("========================================================================")
mask[np.triu_indices_from(mask)] = True #将上三角的值设为true
print(mask)
# sns.heatmap(data.corr(), linewidths=0.1, vmax=1.0, square=True, linecolor='white', annot=True)
# plt.show()
# 隐藏上三角的写法
# mask:数组,隐藏为true的数据;annot:单元格内显示数据
# 'linewidths'参数控制单元格之间的间隔大小,数值越大,间隔越宽;
# 'vmax'参数用于设定颜色映射的最大值,值越大,颜色越偏向暖色调
# linecolor:线条颜色
# cmap:指定指定颜色映射
sns.heatmap(data.corr(), mask=mask, linewidths=2, vmax=1, square=True, linecolor='white', annot=True, cmap='coolwarm')
plt.show()
效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。