【python】python绘制相关性热力图

news/2024/12/31 4:32:08/

1.介绍

  热力图(heatmap),又称相关系数图,根据热力图中不同方块颜色对应的相关系数的大小,可以判断出变量之间相关性的大小。热力图通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示等。

  热力图可通过颜色深浅变化,优雅地展示数据的差异。热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。

  值得注意的是,绘制热力图时,建议选择恰当的调色板,既在视觉上便于区分,也符合所要传达的主旨。

2. 代码

  两个变量之间协方差和标准差的商,皮尔逊相关系数计算公式:

  我们以California房价数据集为例,绘制热力图,代码如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Aug  9 09:19:07 2022@author: augustqi
""""""
python==3.9.0
scikit-learn==1.0.2
numpy==1.22.3
pandas==1.4.2
matplotlib==3.5.1
"""from sklearn.datasets import load_boston
from sklearn.datasets import fetch_california_housing
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns# housing = load_boston()
housing = fetch_california_housing()
X = housing.data
y = housing.target
print("特征名:", housing.feature_names)# 数据转为数据表
X_df = pd.DataFrame(data=X, columns=housing.feature_names)
X_df['target'] = y# 求相关性
data_coor = np.corrcoef(X_df.values, rowvar=0)
data_coor = pd.DataFrame(data=data_coor, columns=X_df.columns, index=X_df.columns)
plt.figure(figsize=(8, 6), facecolor='w') # 底色white
ax = sns.heatmap(data_coor, square=True, annot=True, fmt='.3f', linewidth=1, cmap='winter',linecolor='white', cbar=True,annot_kws={'size':10,'weight':'normal','color':'white'},cbar_kws={'fraction':0.046, 'pad':0.03}) 
# square=True, 热力图呈现正方形
# annot=True, 热力图上显示数据, True:每个格子上写入数据
# fmt='.3f',热力图上的数据保留3位有效数字
# linewidth=1, 每个格子外框宽度,默认为0
# linecolor='white',每个格子边框颜色,默认白色
# cbar=True, 右侧图例开关,默认True
# annot_kws. 格子中数据字体大小、磅值、颜色设置
# cbar_kws, 图例位置、名称、标签设置
# cmap='YlGnBu', 热图颜色盘,控制热图颜色, cmap取值为:
"""
'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 
'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 
'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 
'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 
'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 
'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 
'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 
'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 
'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 
'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 
'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 
'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 
'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'crest', 'crest_r', 
'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'flare', 'flare_r', 'gist_earth', 
'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 
'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 
'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 
'gnuplot_r', 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'icefire', 
'icefire_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'mako', 
'mako_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 
'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 
'rocket', 'rocket_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 
'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 
'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 
'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 
'vlag', 'vlag_r', 'winter', 'winter_r'
"""plt.rcParams['font.sans-serif']= ['Times New Roman']    # 设置字体
# plt.rcParams['font.sans-serif']= ['Arial Unicode MS'] # 显示中文
plt.xticks(rotation=45)  # x轴的标签旋转45度
plt.savefig("heatmap_california.png", dpi=600)
plt.show()

3.结果

绘制的热力图为:

从热力图上可以看到,和target相关性最大的是MedInc(收入中位数)变量;AveRooms和AveBedrms两个变量的正相关性较强。

文章首发于微信公众号:AIexplore
https://mp.weixin.qq.com/s/kRL3A9iH_LhxbQbCa6vJsA

参考资料

[1]https://matplotlib.org/stable/gallery/images_contours_and_fields/image_annotated_heatmap.html
[2]https://zhuanlan.zhihu.com/p/506059576
[3]https://zhuanlan.zhihu.com/p/364624304
[4]https://zhuanlan.zhihu.com/p/165426873


http://www.ppmy.cn/news/12927.html

相关文章

【数据结构】单向链表的原理及实现

1.什么是单链表 链表里的数据是以节点的方式表示的,每一个结点的组成是由:元素指针来组成的,元素就是存储数据里的存储单元,指针就是用来连接每一个结点的地址数据。这个以结点的序列来表示线性表被称作为单链表。 单链表是一种…

文件操作(File类)

文章目录一、初识文件二、File类构造方法常用方法一、初识文件 我们目前是如何存储数据的?弊端是什么? int a 1; int[] arr new int[5];我们这些数据是在内存中存储的,是不能够长久保存的。 那么,我们的计算机当中有没有一块硬件可以长久存储数据…

《和声学教程》学习笔记(五):II级和弦和VI级和弦

II级六和弦(SII6) 1. 重要性 副和弦中应用最广强烈的不稳定性,与主和弦没有共同音与属和弦有共同音,有小调色彩 2. 重复 主要重复低音,即S三和弦的根音,加强与正三和弦的联系有时重复根音和五音 3. 前…

Linux进程控制(进程退出+进程等待)

目录 一、子进程创建 1.1 fork函数深入 1.2 写时拷贝 二、进程退出 2.1.1 进程退出码概念 2.1.2 系统退出码文字描述 2.1.3 _exit和exit函数 2.1.4 查看退出码 三、进程等待 3.1 进程等待解决僵尸进程 3.2 进程等待方法 3.2.1 wait 3.2.2 waitpid() 四、…

力扣sql基础篇(十)

力扣sql基础篇(十) 1 矩形面积 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 纵坐标相同或者横坐标的两个点是不可能成为矩形的 # 使用inner join连接两个表的时候 考虑需不需要去重,如何去重也是很重要的(会有重复的两条数据,只是顺序不一样) S…

Matplotlab绘制散点图小节

前言现有一堆数据,是散点坐标形式,现在需要将它们绘制成散点图,并解决了关于Matplotlib绘图不能显示汉字的问题。读取数据数据格式如下图。第一行为一个数字,表示当前文件共有多少行数据。 第二行开始为真正的数据,各数…

2023牛客寒假算法基础集训营1

第一场题目比较简单,有蛮多诈骗题的,难的题目只有B,I,J之后慢慢补。 简单题 A.World Final? World Cup! (I) (模拟) 题意思路 模拟题,每队轮流踢555个球,看哪个球队踢完这球后,按最好的情况…

Vector - VT System - 模拟IO板卡_VT2816

前面介绍了模拟量的输入板卡VT2004,今天我们介绍的这个板卡依然是模拟量的输入,具体使用场景可能要我们根据实际的使用场景去进行选择。VT2004更偏向于激励,而VT2816更偏向于通用模拟量的IO使用,下面我们从功能、参数、硬件结构等…