最近在建模时有绘制相关系数矩阵热力图的需要,在此记录一下热力图的基本使用
这里使用seaborn库中的的heatmap完成热力图的绘制,我们可以根据图中不同方块颜色来判断变量之间相关系数的大小,接下来介绍heatmap的使用和参数
heatmap(data, vmin=None, vmax=None, cmap=None, center=None, annot=None, fmt='.2g',
annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws = None,
square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None)
- data:指定绘制热力图的数据集。可以是Dataframe或np.array
- vmin,vmax:用于指定图例中最小值与最大值的显示值。
- cmap:指定一个colormap对象,用于热力图的填充色。
详细参见 https://matplotlib.org/2.0.2/examples/color/colormaps_reference.html
- center:指定颜色中心值,通过该参数可以调整热力图的颜色深浅。
- annot:指定一个bool类型的值或与data参数形状一样的数组,如果为True,就在热力图的每个单元上显示数值。
- fmt:指定单元格中数据的显示格式。
- annot_kws:有关单元格中数值标签的其他属性描述,如颜色、大小等。
- linewidths:指定每个单元格的边框宽度。
- linecolor:指定每个单元格的边框颜色。
- cbar:bool类型参数,是否用颜色条作为图例,默认为True。
- square:bool类型参数,是否使热力图的每个单元格为正方形,默认为False。
- cbar_kws:有关颜色条的其他属性描述。
- xticklabels, yticklabels:指定热力图x轴和y轴的刻度标签,如果为True,则分别以数据框的变量名和行名称作为刻度标签。
- mask:用于突出显示某些数据。
- ax:用于指定子图的位置。
接下来对某物品所含化学成分进行相关性分析
源数据
代码实现
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
os.chdir(r'E:\Code\建模')
data = pd.read_excel(r"data.xlsx")
m,n = data.shape
data = data.iloc[0:m+1,1:]
# 计算相关系数矩阵
data = data.corr()
#处理中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False
mask=np.zeros_like(data)
for i in range(1,len(mask)):
for j in range(0,i):
mask[j][i]=True
# 设置下三角mask遮罩,上三角将i,j互换即可
sns.heatmap(data = data, mask=mask, cmap='RdBu', vmax=1, vmin =-1,center=0,annot=True,square=True,linewidths=0,
cbar_kws={"shrink":.6},xticklabels=True,yticklabels=True,fmt='.2f')
# center 值越大颜色越浅
# shrink:n n为缩短的比例(0-1)
# fmt='.2f' 显示数字保留两位小数
plt.title('热力图',fontsize='xx-large',fontweight='heavy')
# 设置标题字体
plt.show()
结果及分析
数字绝对值越大颜色越深,代表相关联程度越大