Python绘制热力图

最近在建模时有绘制相关系数矩阵热力图的需要,在此记录一下热力图的基本使用

这里使用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对象,用于热力图的填充色。

Python绘制热力图

详细参见 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:用于指定子图的位置。

接下来对某物品所含化学成分进行相关性分析

源数据 

Python绘制热力图

代码实现

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()

 结果及分析

Python绘制热力图

 数字绝对值越大颜色越深,代表相关联程度越大 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月8日 下午9:53
下一篇 2023年3月8日 下午9:55

相关推荐

此站出售,如需请站内私信或者邮箱!