一文弄懂Seaborn绘制热力图

news2024/10/5 20:23:23

1. 引言

在本文中,我们将使用Seaborn库来以heatmap热力图的形式来表示数据。我们将重点介绍如何创建它,以及如何更改其颜色,调整对应字体大小等等。

闲话少说,我们直接开始吧!

2. 什么是热力图?

Heatmap,中文称为热力图,是一种数据可视化技术,它通过颜色的变化来表示数据的大小或密度。在热力图中,数据大小的变化通常会被表示为颜色渐变,从而在二维空间上形成一种“热度”的分布图。

颜色的深浅通常用来表示数据的量值大小,颜色越深表示数值越高,反之则越低。这种图表非常适合展示地理信息、用户行为、科学测量等数据的分布情况。

3. 安装Seaborn库

要在Python中创建heatmap,可以使用Seaborn库进行操作,该库建立在Matplotlib库的基础之上。Seaborn库提供了一个高级的数据可视化抽象接口方便我们可以绘制各种矩阵数据。

想要在代码中使用该库,一般通过pip命令进行该库的安装,如下:

pip install seaborn

运行结果如下:
在这里插入图片描述

4. 基本用法

好的,现在让我们创建一个热力图,首先让我们导入我们所需的库,如下:

import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt

我们导入了numpy模块,用以生成给定范围内的随机数数组,进而将该数组绘制为热力图。

data = np.random.rand(4, 6)

上述代码将创建一个2维数组,行数为4,列数为6;上述数组中的值表示用来画热力图的数值,接着我们将使用Seaborn库中的heatmap函数来绘制热力图,相应的绘制代码如下:

heat_map = sb.heatmap(data)

接着让我们使用matplotlib库中的plt.show()函数来展示上述热力图,如下:


plt.show()

运行后结果如下:
在这里插入图片描述

5.删除刻度标签

在数据可视化中,tick labels刻度标签是指在图表中x轴、y轴上显示的标签值,用于指示轴上每个刻度的具体数值或类别。Seaborn库在绘制热力图的时候默认会添加相应的刻度标签, 如果我们想要删除上述刻度标签我们可以通过设置xticklabel或者yticklabel的属性值来进行控制。代码如下:

heat_map = sb.heatmap(data, xticklabels=False, yticklabels=False)
plt.show()

运行后结果如下:
在这里插入图片描述

6. 设置x轴文本标签

我们可以使用Matplotlib库中的pyplot.label函数来为上述热力图添加x轴上的文本标签说明,代码如下:

heat_map = sb.heatmap(data)
plt.xlabel("Values on X axis")
plt.show()

运行后结果如下:
在这里插入图片描述

7. 删除y轴刻度标签

一般来说,Seaborn库也默认在y轴上添加相应的刻度标签,我们可以通过设置yticklabels=False,来实现保留x轴上的默认刻度标签,仅删除y轴上的刻度标签,代码如下:

heat_map = sb.heatmap(data, yticklabels=False)
plt.show()

运行后结果如下:

在这里插入图片描述

8.设置y轴文本标签

参考前面章节,我们也可以类似地使用Matplotlib库中的pyplot.ylabel来实现绘制热力图上y轴的文本标签,代码如下:

data = np.random.rand(4, 6)
heat_map = sb.heatmap(data)
plt.ylabel('Values on Y axis')
plt.show()

运行后结果如下:
在这里插入图片描述

9. 设置热力图颜色

我们也可以通过使用heatmap中的cmap属性来通过改变调色板color map进而实现更改seaborn中绘制heatmap的颜色。代码如下:

data = np.random.rand(4, 6)
heat_map = sb.heatmap(data,cmap="YlGnBu")
plt.show()

运行后结果如下:
在这里插入图片描述

10. 设置热力图网格显示数值

如果我们需要在heatmap上显示具体的文本数值,我们可以使用heatmap函数中的annot参数控制。如果设置annot=True, 则热力图上每个单元格会展示对应的文本数值。代码如下:

data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True)
plt.show()

运行结果如下:
在这里插入图片描述

11. 调整显示字体大小

我们可以使用seabornfont_scale属性来调整heatmap显示文本中的字体大小,如下所示:

data = np.random.rand(4, 6)
sb.set(font_scale=2)
heat_map = sb.heatmap(data, annot=True)
plt.show()

增大显示文本字体大小后,热力图的效果如下所示:
在这里插入图片描述

12.控制热力图调色板

热力图中的调色板如下图中圆圈所示:
在这里插入图片描述
事实上,heatmap函数中的参数cbar是一个Bool型变量,主要用来控制是否应该显示上述调色板。默认来说,上述变量设置为True,表示默认在画热力图的时候会展示相应的调色板。我们也可以使用以下代码,来删除右侧图中的调色板,代码如下:

data = np.random.rand(4, 6)
sb.set(font_scale=2)
heat_map = sb.heatmap(data, annot=True,cbar=False)
plt.show()

运行后结果如下:
在这里插入图片描述

13. 调色板添加文本标签

为了给热力图中的调色板添加相应的文本标签,用来说明文字提示。我们一般使用变量参数cbar_kws来控制,代码如下:

data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True, 
   cbar_kws={'label': 'My Colorbar'})
plt.show()

运行后结果如下:
在这里插入图片描述

14. 调整调色板显示位置

参考上一章节,参数cbar_kws除了控制为调色板添加自定义文本外,还可以控制调色板水平和垂直显示。虽然默认情况下,调色板为垂直显示,我们可以通过以下代码来控制水平显示调色板,代码如下:

data = np.random.rand(4, 6)
heat_map = sb.heatmap(data, annot=True, 
  cbar_kws={'label': 'My Colorbar', 
           'orientation': 'horizontal'})
plt.show()

运行后结果如下:
在这里插入图片描述

15. 自定义网格线

自定义Seaborn热力图中的网格线可以增强数据可视化的可读性和美观性。调整线宽和线条颜色可以明显地分离数据点,使热力图更加直观和直观。我们可以调整分隔单元格的线条宽度,并改变它们的颜色,以使单元格之间的区别更加清晰。

data = np.random.rand(4, 6)
sns.heatmap(df, annot=True, cmap='coolwarm', linewidths=0.5, linecolor='black')
plt.show()

运行后结果如下:
在这里插入图片描述
上图中的热力图现在有更明显的网格线,单元格线宽为0.5,颜色为黑色,使每个单元格分离更加明显,数据更容易读取。

16. 自定义显示数据格式

观察上述在Seaborn绘制的热力图中的小数,有的保留小数点后两位,有的为小数点后一位,看起来不太完美!

事实上,我们可以设置带四舍五入小数点的格式,一般通过在函数heatmap中使用fmt参数控制。此参数允许大家指定格式化输出的字符串来控制输出格式。

例如,如果要显示四舍五入到小数点后两位的数字,可以使用fmt=".2f"。代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(0)
data = pd.DataFrame(np.random.randn(10, 10))
corr = data.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, fmt=".2f", cmap='coolwarm')
plt.show()

运行后结果如下:

在这里插入图片描述

17. 总结

本文重点介绍了在Python中如何利用Seaborn库来绘制热力图,用来直观的可视化数据的密度和分布,并详细介绍了不同参数控制下的可视化效果,并给出了相应的代码示例!

您学废了嘛!

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

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

相关文章

Python 数学应用(四)

原文:zh.annas-archive.org/md5/123a7612a4e578f6816d36f968cfec22 译者:飞龙 协议:CC BY-NC-SA 4.0 第十一章:其他主题 在本章中,我们将讨论一些在本书前几章中没有涉及的主题。这些主题大多涉及不同的计算方式以及优…

向量数据库与图数据库:理解它们的区别

作者:Elastic Platform Team 大数据管理不仅仅是尽可能存储更多的数据。它关乎能够识别有意义的见解、发现隐藏的模式,并做出明智的决策。这种对高级分析的追求一直是数据建模和存储解决方案创新的驱动力,远远超出了传统关系数据库。 这些创…

C代码编译过程与进程内存分布

C代码编译过程 在这篇文章中,我们将探讨C语言代码的编译流程以及进程在运行时的内存布局。编译过程通常包括几个关键步骤:预处理、编译、汇编和链接。 预处理阶段主要是处理源代码文件中的宏定义、头文件包含和条件编译指令。在此阶段,编译…

ping命令的使用

一、实验环境 同实验案例分析ARP解析过程环境。 二、需求描述 熟悉 ping 命令的用法并熱悉 ping 命令的各种参数 三、推荐步骤 分别 ping 一个存在的和不存在的IP地址,观察返回的信息分别测试 ping 命令的相关参数。 四、实验步骤 1.ping 一个存在的和不存在…

工业电脑在ESOP工作站行业应用

ESOP工作站行业应用 项目背景 E-SOP是实现作业指导书电子化,并统一管理和集中控制的一套管理信息平台。信迈科技的ESOP终端是一款体积小巧功能齐全的高性价比工业电脑,上层通过网络与MES系统连接,下层连接显示器展示作业指导书。ESOP控制终…

FPGA - ZYNQ 基于EMIO的PS和PL交互

前言: Xilinx ZYNQ系列的芯片,GPIO分为 MIO 、EMIO、AXI_GPIO三种方式。 MIO :固定管脚,属于PS端,也就是ARM端。 EMIO :通过PL扩展,使用时需要分配PL(FPGA)管脚,消耗PL端资源。…

redis-plus-plus的安装与使用

文章目录 一、安装第一步:安装hiredis第二步:安装redis-plus-plus第三步:将编译后的可执行文件移动到/usr/local对应目录第四步:更新动态库 二、使用第一步:编写示例代码第二步:编译运行 本文参考自 redis-…

Pytest测试用例中的mark用法(包含代码示例与使用场景详解)

在软件开发中,测试是确保代码质量和功能稳定性的重要环节。Python作为一门流行的编程语言,拥有丰富的测试工具和框架,其中pytest是其中之一。pytest提供了丰富的功能来简化测试用例的编写,其中的mark功能允许我们对测试用例进行标…

Pytest精通指南(16)利用skip、skipif跳过用例执行

文章目录 前言skip源码分析skip装饰方法skip装饰类skip装饰模块skipif源码分析skipif装饰方法skipif装饰类skipif装饰模块拓展-用例内部跳过执行 前言 skip: skip用于无条件地跳过测试用例,无论测试环境的状态或条件如何。通常用于那些在任何情况下都不应该执行的测…

idea使用plantuml插件报错(类图):Dot Executable: /opt/local/bin/dot

报错提示: 解决方式: 方式一: 直接设置Remote Rendering即可 (使用服务器地址) 无特殊要求可直接使用默认提供的服务地址,也可自行搭建服务替换地址。 自行搭建服务可参考: 在本地Windows 11 系统的桌面…

分布式调度器

xxl-job介绍 xxl-job 是一个轻量级分布式任务调度框架,支持动态添加、修改、删除定时任务,支持海量任务分片执行,支持任务执行日志在线查看和分页查询,同时支持任务失败告警和重试机制,支持分布式部署和高可用。xxl-j…

中文编程入门(Lua5.4.6中文版)第十三章 Lua 文件操作

在《Lua世界》的冒险旅途中,勇士们时常需要与神秘的文本卷轴打交道。为了更好地掌握这些知识宝藏,Lua I/O库提供了两种强大的探索模式:简单模式和完全模式,助你轻松应对各类文献挑战。 简单模式:初识卷轴 简单模式如…

结构体及应用;结构体指针及应用;union、enum、typedef三个关键字

结构体及应用 参考文章链接:https://blog.csdn.net/zw1996/article/details/53844585结构体的声明 结构体的初始化 注意如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了。 /这样是可以的,在定义变量的时候就初始化了…

顺序表(增删减改)+通讯录项目(数据结构)+顺序表专用题型

什么是顺序表 顺序表和数组的区别 顺序表本质就是数组 结构体初阶进阶 系统化的学习-CSDN博客 简单解释一下,就像大家去吃饭,然后左边是苍蝇馆子,右边是修饰过的苍蝇馆子,但是那个好看的苍蝇馆子一看,这不行啊&a…

C++动态内存管理 解剖new/delete详细讲解(operator new,operator delete)

讨厌抄我作业和不让我抄作业的人 讨厌插队和不让我插队的人 讨厌用我东西和不让我用东西的人 讨厌借我钱和不借给我钱的人 讨厌开车加塞和不让我加塞的人 讨厌内卷和打扰我内卷的人 一、C中动态内存管理 1.new和delete操作内置类型 2.new和delete操作自定义类型 二、operat…

Ethereum WebSocket接口实践

之前在学习Ethereum的infura API时候看到有WebSocket,但是翻了很久都没找到很完整的接口文档和实践文档。当时比较迷,没太在意,以为是区块链接口的性能还用不上WebSocket,HTTP完全支持没问题。 后面在更深入学习了jsonrpc协议之后…

面试官:一个Java对象占用多大内存?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

校园智能水电预付费管理系统

校园智能水电预付费管理系统是一种专为学校水电资源管理而设计的智能化系统,旨在提供全面的水电资源管理解决方案,满足校园管理者对水电资源管理的需求。该系统整合了先进的智能技术和云计算,为校园管理者提供了实时监控、自动计费、节能管理…

Windows 部署ChatGLM3大语言模型

一、环境要求 硬件 内存:> 16GB 显存: > 13GB(4080 16GB) 硬盘:60G 软件 python 版本推荐3.10 - 3.11 transformers 库版本推荐为 4.36.2 torch 推荐使用 2.0 及以上的版本,以获得最佳的推理性能 二、部…

docker安装EelasticSearch、目录权限修改、并安装IK 中文分词器

文章目录 docker安装EelasticSearch、目录权限修改、并安装IK 中文分词器1、docker安装ES2、docker ps发现容器没有正常启动,docker logs 容器id 查看日志发现是挂载目录的权限不足3、修改目录的权限4、使用docker restart 容器id重新启动刚才没有启动成功的容器5、…