python特征相关性热力图怎么画_如何在python中绘制热地图(实例)

v2-3848e2ac221fbf46b9eeffe1c98f3a97_1440w.jpg?source=172ae18b

当我们进行数据挖掘工作、或者进行数据可视化以更好地展示成果时,很多时候我们需要借助到热地图的帮助。今天,我们就来介绍一下在seaborn绘图库中热地图heatmap的使用方法及参数设置。

热地图使用场景:

进一步查看数据表中特征两两之间的相关性

在数据挖掘的前期工作中,对于研究特征关系十分有效

一、函数体及主要参数

函数体:

seaborn

主要参数:

(1)data:

数据集,可以是array型的数组或者是DataFrame类型。当数据集为DataFrame类型时,数据集的行与列的信息分别对应热地图heatmap的行信息和列信息。也就是说,数据集的索引(index)会作为热地图的行标签,列名会作为热地图的列标签。

(2)矩阵块颜色参数:

  1. vmax、vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定。
  2. cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定
  3. center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变
  4. robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定。

(3)热力图矩阵块注释参数:

  1. annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据。
  2. fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字。
  3. annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置。

(4)热力图矩阵块之间间隔及间隔线参数:

  1. linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小。
  2. linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是’white’

(5)热力图颜色刻度条参数:

  1. cbar:是否在热力图侧边绘制颜色刻度条,默认值是True。
  2. cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None。
  3. cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None。

(6)square:设置热力图矩阵小块形状,默认值是False

  1. xticklabels、yticklabels:xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出。
  2. mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉。
  3. ax:设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值

二、实例操作

(1)数据集介绍

本次实例,我们使用之前的肝炎数据集。有需要的同学可以看看之前的文章:

侦探L:Pandas与机器学习实例——肝炎数据集(1)​zhuanlan.zhihu.com
v2-70c54c828e3fb7a7601df26591fff7d4_ipico.jpg

看一下我们本次实例用到的数据表:

df[['类固醇','疲惫','不适','厌食','肝大','肝硬化','脾可触','蛛状','腹腔积水','静脉曲张']].head(10)

v2-8a94ecd3bcccaf0f8ec83772c3e19554_b.jpg

可以看到,数据表中的特征都是取值0与1的分类型数据。

我们的目的是,查看这些特征两两之间的相关性。

首先,使用corr()获取这些特征的相关系数表:

corr = df[['类固醇','疲惫','不适','厌食','肝大','肝硬化','脾可触','蛛状','腹腔积水','静脉曲张']].corr()
corr

v2-17aa70351cb0afc7340a90e1d6bf3fbd_b.jpg

可以看到,由于数据的特征列较多,因此我们无法直观上看出各个特征的相关程度。这时候,就需要借助我们的热地图heatmap。

导入我们绘图所需要的库:

from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set()

(这里我用的是jupyter notebook,因此在会多加一条%matplotlib inline的代码,这条命令的作用是将 Matplotlib 绘制的图形嵌入在当前页面中。而在桌面环境中绘图时,不需要添加此命令,而是在全部绘图代码之后追加plt.show( ))

(2)进行测试

1、使用默认参数:

plt.rcParams['font.sans-serif']=['SimHei']
fig = plt.figure(figsize=(10,10))
sns.heatmap(corr)
plt.show()

v2-e05d26d56b0a585b73dcfb461f160ede_b.jpg

可以看到此时我们绘制出了一个基本的热地图,从右边的绘制颜色刻度条可以看到,颜色越浅,则特征之间的相关性越强。

2、尝试利用annot = True在热地图每个方格写入数据:

plt.rcParams['font.sans-serif']=['SimHei']
fig = plt.figure(figsize=(10,10))
sns.heatmap(corr,annot = True)
plt.show()

v2-ed06c04432577750d5c012e847d98894_b.jpg

可以看到,此时我们热地图的信息变得更加清晰了。

3、利用linewidths在热地图的矩阵块之间设置分隔线:

plt.rcParams['font.sans-serif']=['SimHei']
fig = plt.figure(figsize=(10,10))
sns.heatmap(corr,annot = True,linewidths=1)
plt.show()

v2-c136054d03b2e02534a03f80e5d2d1d4_b.jpg

在热地图的日常使用中,annot和linewidths是比较常用的两个参数,由于篇幅原因,其他参数我们就不一一调试了,感兴趣的同学可以自己动手试试~

三、本例中使用热地图的好处

通过使用热地图,我们可以比较直观地得到以下两个结论:

1、“不适”和“疲惫”两列的相关性较强,达到0.59;也就是说,感到“不适”的患者,很多也伴随着“疲惫”症状。

2、“不适”和“厌食”两列的相关性较强,达到0.6;也就是说,感到“不适”的患者,很多同时也伴随着“厌食”的情况。


以上便是<如何在python中绘制热地图(实例)>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~

### 使用Python生成相关性热力 在数据科学领域,相关性热力是一种用于展示变量之间关系的有效方式。以下是通过Python中的`pandas`、`numpy`以及`seaborn`库来生成相关性热力的具体方法。 #### 准备工作 为了绘制相关性热力,通常需要先计算数据集的相关矩阵。这可以通过`pandas.DataFrame.corr()`函数完成[^1]。随后利用`seaborn.heatmap()`函数将该矩阵可视化为热力。 #### 示例代码 以下是一个完整的示例代码: ```python import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 创建随机数据框 np.random.seed(0) data = np.random.randn(100, 5) df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D', 'E']) # 计算相关系数矩阵 correlation_matrix = df.corr() # 绘制热力 plt.figure(figsize=(8, 6)) sns.set(style="whitegrid", font_scale=1.2) heat_map = sns.heatmap( correlation_matrix, annot=True, # 显示具体数值 fmt=".2f", # 数值保留两位小数 cmap='coolwarm', # 颜色主题 cbar_kws={"shrink": .8} # 调整颜色条大小 ) plt.title('Correlation Heatmap') plt.show() ``` 上述代码中,`annot=True`参数表示在单元格中标注具体的数值;`cmap='coolwarm'`定义了渐变的颜色方案,其中冷色调代表负相关而暖色调代表正相关。 对于更复杂的场景,比如分类变量的影响分析,则可以参考其他绘类型如小提琴(`violinplot`)的应用实例[^2]。如果涉及深度学习模型解释,则可能需要用到高级技术如Grad-CAM来进行特征重要性的可视化[^3]。 #### R语言实现 虽然本问题主要讨论的是Python环境下的解决方案,但在R语言中也可以轻松构建类似的表。常用包包括`ggplot2`和`corrplot`: ```r library(ggplot2) library(corrplot) # 构造模拟数据 set.seed(123) data <- matrix(rnorm(500), ncol=5) colnames(data) <- LETTERS[1:5] # 计算并显示相关矩阵 cor_mat <- cor(data) corrplot(cor_mat, method="color", type="upper", tl.col="black", tl.srt=45) ``` 此段脚本展示了如何借助`corrplot`包快速生成美观的相关性热力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值