【Python】数据可视化之热力图

 热力图(Heatmap)是一种通过颜色深浅来展示数据分布、密度和强度等信息的可视化图表。它通过对色块着色来反映数据特征,使用户能够直观地理解数据模式,发现规律,并作出决策。

目录

基本原理

sns.heatmap

代码实现


基本原理

热力图本质上是一个数值矩阵,图上每一个色块都代表一个数值。通过离散数值、权重算法与分析模型等技术手段,将用户行为频度或数据密度以色块的形式展现出来。在设计时,需要指定颜色映射的规则,例如较大的值可以由较深的颜色或偏暖的颜色表示,而较小的值则由较浅的颜色或较冷的颜色表示。

两个变量之间相关系数的计算公式为:

$\mathrm{p}_{\mathrm{X}_1\mathrm{X}_2}=\frac{\mathrm{Cov}(\mathrm{X}_1,\mathrm{X}_2)}{\sqrt{\mathrm{DX}_1,\mathrm{DX}_2}}=\frac{\mathrm{EX}_1\mathrm{X}_2-\mathrm{EX}_1*\mathrm{EX}_2}{\sqrt{\mathrm{DX}_1*\mathrm{DX}_2}}$

ρ表示相关系数,Cov表示协方差,E表示数学期望/均值。值得注意的是,该相关系数主要用以量化变量之间的线性关联强度;具体而言,当相关系数较高时,它指示了变量间存在较强的线性相关性。然而,对于相关系数较低的两个变量而言,这仅仅表明它们之间的线性相关程度较弱,而并非意味着这两个变量之间完全不存在其他类型的关联,如非线性(如曲线)关系或其他复杂的相关性。因此,在解释相关系数时需谨慎,避免过度简化或误读变量间的关系。

sns.heatmap

sns.heatmap 是 Seaborn 库中的一个非常有用的函数,用于绘制热力图(Heatmap)。热力图是一种通过颜色深浅来表示数据大小的图形,常用于展示矩阵或表格数据的分布和关系。在数据可视化中,热力图尤其适合展示变量之间的相关性、数据的聚类情况或数据的密度分布等。

sns.heatmap涉及到一些主要的参数:

  • vmin, vmax:这两个参数用于设置热力图中颜色映射的最小值和最大值,可以调整颜色映射的范围以更好地展示数据。
  • cmap:指定颜色映射表(colormap),用于控制热力图中颜色的分布和变化。
  • annot:如果设置为True,则在每个单元格中显示数据值。也可以是一个形状与数据相同的数组,用于自定义注释内容。
  • fmt:当annot为True时,用于设置注释的格式化字符串。
  • linewidths:设置热力图单元格之间的线条宽度。
  • linecolor:设置热力图单元格之间线条的颜色。
  • cbar:是否显示颜色条。
  • square:如果为True,则强制热力图的每个单元格都是正方形的。
  • mask:一个布尔数组或DataFrame,用于指定哪些单元格应该被屏蔽(不显示)。这对于绘制下三角或上三角矩阵特别有用。

代码实现

# 生成一个3x3的随机数组
values = np.random.rand(3, 3)
# 设置x轴标签
x_ticks = ['x-1', 'x-2', 'x-3']
# 设置y轴标签
y_ticks = ['y-1', 'y-2', 'y-3'] 
# 使用seaborn库绘制热图,并设置x轴和y轴标签
ax = sns.heatmap(values, xticklabels=x_ticks, yticklabels=y_ticks)
# 设置图表标题
ax.set_title('3x3 Heatmap') 
# 设置x轴标签
ax.set_xlabel('x label')  
# 设置y轴标签
ax.set_ylabel('y label')
# 显示图表
plt.show()

uniform_data = np.random.rand(10, 12) 
ax = sns.heatmap(uniform_data)

通过annot参数设置可以在小方格中显示数值

# 生成一个10行12列的随机数矩阵
uniform_data = np.random.rand(10, 12)
# 使用seaborn库中的heatmap函数绘制热力图,annot参数设置为True表示在热力图上显示数据值
ax = sns.heatmap(uniform_data, annot=True)

可以创建一个与相关系数矩阵相同大小的布尔矩阵,用于遮罩,实现更加简化美观的效果。

布尔矩阵(Boolean Matrix)是数学中的一个重要概念,它指的是元素只取0或1的矩阵,因此也被称为0-1矩阵。布尔矩阵在计算机科学、编码理论、网络理论等领域有着广泛的应用。在数学上,布尔矩阵通常使用大写字母(如A, B, C等)表示,矩阵中的元素使用小写字母加下标(如a_ij)表示,其中i表示行号,j表示列号。

# 导入ascii_letters模块
from string import ascii_letters
# 设置seaborn的样式为white
sns.set(style="white")
# 创建一个随机数生成器
rs = np.random.RandomState(33)
# 创建一个100行26列的DataFrame,数据为正态分布随机数
d = pd.DataFrame(data=rs.normal(size=(100, 26)),columns=list(ascii_letters[26:]))
# 计算DataFrame的相关系数矩阵
corr = d.corr()
# 创建一个与相关系数矩阵相同大小的布尔矩阵,用于遮罩
mask = np.zeros_like(corr, dtype=bool)
# 将上三角矩阵的元素设置为True
mask[np.triu_indices_from(mask)] = True
# 创建一个11x9的子图
f, ax = plt.subplots(figsize=(11, 9))
# 创建一个颜色映射
cmap = sns.diverging_palette(220, 10, as_cmap=True)
# 绘制热力图,使用遮罩,颜色映射,最大值为0.3,中心值为0,方格,边框宽度为0.5,颜色条缩小为0.5
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96065.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何 正确使用 nrm 工具 管理镜像源

目录 nrm 是啥? nrm 的安装 查看你当前已有的镜像源 怎么切换到目标镜像源 添加镜像源 删除镜像源 测试镜像源速度 nrm 是啥? 镜像源:可以理解为,你访问或下载某jar包或依赖的仓库。 nrm(Node Registry Manag…

关于对逾期提醒的定时任务~改进完善

Spring Boot 中实现到期提醒任务的定时Job详解在金融或借贷系统中,到期提醒是常见的功能需求。通过定时任务,可以定期扫描即将到期的借款记录,并生成或更新提醒信息。本文基于提供的三个JobHandler类(FarExpireRemindJob、MidExpi…

springboot配置请求日志

springboot配置请求日志 一般情况下,接口请求都需要日志记录,Java springboot中的日志记录相对复杂一点 经过实践,以下方案可行,记录一下完整过程 一、创建日志数据模型 创建实体类,也就是日志文件中要记录的数据格式 …

Redis(50) Redis哨兵如何与客户端进行交互?

Redis 哨兵(Sentinel)不仅负责监控和管理 Redis 主从复制集群的高可用性,还需要与客户端进行有效的交互来实现故障转移后的透明连接切换。下面详细探讨 Redis 哨兵如何与客户端进行交互,并结合代码示例加以说明。 哨兵与客户端的交…

【.Net技术栈梳理】04-核心框架与运行时(线程处理)

文章目录1. 线程管理1.1 线程的核心概念:System.Threading.Thread1.2 现代线程管理:System.Threading.Tasks.Task 和 Task Parallel Library (TPL)1.3 状态管理和异常处理1.4 协调任务:async/await 模式2. 线程间通信2.1 共享内存与竞态条件2…

(JVM)四种垃圾回收算法

在 JVM 中,垃圾回收(GC)是核心机制之一。为了提升性能与内存利用率,JVM 采用了多种垃圾回收算法。本文总结了 四种常见的 GC 算法,并结合其优缺点与应用场景进行说明。1. 标记-清除(Mark-Sweep)…

论文阅读:VGGT Visual Geometry Grounded Transformer

论文阅读:VGGT: Visual Geometry Grounded Transformer 今天介绍一篇 CVPR 2025 的 best paper,这篇文章是牛津大学的 VGG 团队的工作,主要围绕着 3D 视觉中的各种任务,这篇文章提出了一种多任务统一的架构,实现一次输…

python编程:一文掌握pypiserver的详细使用

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、 pypiserver 概述 1.1 pypiserver是什么? 1.2 核心特性 1.3 典型应用场景 1.4 pypiserver优缺点 二、 安装与基本使用 2.1 安装 pypiserver 2.2 快速启动(最简模式) 2.3 使用私有服务器安装包 2.4 向私有服务…

Git reset 回退版本

- 第 121 篇 - Date: 2025 - 09 - 06 Author: 郑龙浩(仟墨) 文章目录Git reset 回退版本1 介绍三种命令区别3 验证三种的区别3 如果不小心git reset --hard将「工作区」和「暂存区」中的内容删除,刚才的记录找不到了,怎么办呢&…

ARM 基础(2)

ARM内核工作模式及其切换条件用户模式(User Mode, usr) 权限最低,运行普通应用程序。只能通过异常被动切换到其他模式。快速中断模式(FIQ Mode, fiq) 处理高速外设中断,专用寄存器减少上下文保存时间,响应周期约4个时钟周期。触发条件为FIQ中…

Flutter 性能优化

Flutter 性能优化是一个系统性的工程,涉及多个层面。 一、性能分析工具(Profiling Tools) 在开始优化前,必须使用工具定位瓶颈。切忌盲目优化。 1. DevTools 性能视图 DevTools 性能视图 (Performance View) 作用:…

Spring事件监听机制(三)

为了理解EvenListener注解的底层原理,我们可以自己实现一个类似的注解模拟实现。1.定义MyListener注解Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)public interface MyListener {}2.注解使用Componentstatic class SmsService {private static…

基于Springboot + vue3实现的小区物业管理系统

项目描述本系统包含管理员和用户两个角色。管理员角色:用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。房屋信息管理:管理房屋信息,包括新增、查看、修改和删除房屋信息。车辆信息管理:管理…

交叉熵和KL散度

这个问题之前我也是傻傻分不清,决定整理一下,用更印象深刻的方式让人记住。核心联系:交叉熵 KL 散度 真实分布的熵 交叉熵作为 “绝对” 度量,会综合真实分布的熵(固有难度)与预测误差,直接体…

HTML 各种事件的使用说明书

HTML 各种事件的使用说明书 1. HTML 事件简介 HTML事件是浏览器或用户在网页上执行的动作或发生的事情。当这些事件发生时,可以通过JavaScript来响应和处理这些事件,从而实现网页的交互功能。事件处理是Web前端开发中实现动态交互的核心机制。 基本概…

Kafka面试精讲 Day 10:事务机制与幂等性保证

【Kafka面试精讲 Day 10】事务机制与幂等性保证 在分布式消息系统中,如何确保消息不丢失、不重复,是系统可靠性的核心挑战。Kafka自0.11版本起引入了幂等性Producer和事务性消息机制,彻底解决了“至少一次”语义下可能产生的重复消息问题&am…

时序数据库简介和安装

一、简介1. 什么是时序数据库?时序数据库是专门用于存储和处理时间序列数据的数据库系统。时间序列数据是指按时间顺序索引的一系列数据点。每个数据点都包含:一个时间戳:记录数据产生的时间。一个或多个指标值:例如温度、湿度、C…

comfyUI 暴露网络restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打开开发者选项 如图

linux系统address already in use问题解决

linux系统上某个端口被占用,如何解决?1.找到占用的进程编号:netstat -tulnp | grep :80002.强制杀死该进程kill -9 80603其他说明:1.查找占用端口的进程,可以用:lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保洁预约系统【计算机毕业设计选题 计算机毕业设计项目 计算机毕业论文题目推荐】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…