Seaborn 热图教程(Python 数据可视化)

2023-10-26

在本教程中,我们将使用名为 seaborn 的 Python 库以热图形式表示数据。该库用于基于以下内容可视化数据Matplotlib.

您将了解什么是热图、如何创建它、如何更改其颜色、调整其字体大小等等,所以让我们开始吧。

 

 

什么是热图?

热图是一种以二维形式表示数据的方法。数据值在图表中表示为颜色。热图的目标是提供信息的彩色视觉摘要。

创建热图

要在Python中创建热图,我们可以使用seaborn库。 seaborn 库构建在 Matplotlib 之上。 Seaborn 库提供了一个高级数据可视化界面,我们可以在其中绘制矩阵。

在本教程中,我们将使用以下 Python 组件:

  • Python 3(我将使用 Python 3.7)
  • Matplotlib
  • NumPy
  • Seaborn

要安装seaborn,请运行pip命令,如下所示:


pip install seaborn  

Seaborn 支持以下图:

  • 分布图
  • 矩阵图
  • 回归图
  • 时间序列图
  • 分类图

好的,现在让我们创建一个热图:

导入以下所需模块:


import numpy as np

import seaborn as sb

import matplotlib.pyplot as plt  

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


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

这将创建一个四行六列的二维数组。现在让我们将这些数组值存储在热图中。我们可以使用seaborn模块的heatmap函数创建热图。然后我们将数据传递如下:


heat_map = sb.heatmap(data)  

使用 matplotlib,我们将在输出中显示热图:


plt.show()  

恭喜!我们创建了第一个热图!

 

删除热图 x 刻度标签

热图中每个块的 x 轴和 y 轴值称为刻度标签。 Seaborn 默认添加刻度标签。如果我们想删除刻度标签,我们可以将seaborn热图的xticklabel或ytickelabel属性设置为False,如下所示:


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

设置热图 x 轴标签

我们可以使用 Matplotlib 的 xlabel 属性在 x 轴上添加标签,如下代码所示:


>>> plt.xlabel("Values on X axis")  

结果如下:

 

删除热图 y 刻度标签

Seaborn 默认添加 y 轴标签。要删除它们,我们可以将 yticklabels 设置为 false。


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

 

设置热图 y 轴标签

您可以使用 Matplotlib 的 ylabel 属性在 y 轴上添加标签,如下所示:


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

>>> heat_map = sb.heatmap(data)

>>> plt.ylabel('Values on Y axis')  

 

 

更改热图颜色

您可以通过使用热图的 cmap 属性的颜色图来更改 seaborn 热图的颜色。

考虑下面的代码:


>>> heat_map = sb.heatmap(data, cmap="YlGnBu")

>>> plt.show()  

这里cmap等于YlGnBu,它代表以下颜色:

在 Seaborn 热图中,我们有三种不同类型的颜色图。

  1. 顺序色彩图
  2. 发散的调色板
  3. 离散数据

顺序色彩图

当数据范围从低值到高值时,您可以使用顺序颜色图。连续颜色图颜色代码可以与 heatmap() 函数或 kdeplot() 函数一起使用。

顺序颜色图包含以下颜色:

这张图片取自Matplotlib.org.

顺序立方体螺旋调色板

立方体螺旋是顺序颜色图的一种形式。当亮度线性增加以及色调略有差异时可以使用它。

Cubehelix 调色板如下所示:

您可以使用 cmap 属性在代码中实现此调色板:


>>> heat_map = sb.heatmap(data, cmap="cubehelix")  

结果将是:

发散的调色板

当热图中的高值和低值很重要时,您可以使用发散调色板。

发散调色板创建了两种 HUSL 颜色之间的调色板。这意味着发散调色板在图表中包含两种不同的色调。

您可以在seaborn中创建发散调色板,如下所示:


import seaborn as sb

import matplotlib.pyplot as plt

>>> sb.palplot(sb.diverging_palette(200, 100, n=11))

>>> plt.show()  

这里200是左侧调色板的值,100是右侧调色板的代码。变量 n 定义块的数量。在我们的例子中,它是 11。调色板如下:

离散数据

在 Seaborn 中,有一个名为 mpl_palette 的内置函数,它返回离散的颜色模式。 mpl_palette 方法将在调色板中绘制值。这个调色板是一个水平数组。

发散的调色板如下所示:

此输出是使用以下代码行实现的:


>>> sb.palplot(sb.mpl_palette("Set3", 11))

>>> plt.show()  

参数 Set3 是调色板的名称,11 是调色板中离散颜色的数量。 seaborn 的 palplot 方法绘制给定调色板的水平数组中的值。

 

在热图上添加文本

要在热图上添加文本,我们可以使用 annot 属性。如果 annot 设置为 True,则文本将写入每个单元格上。如果定义了每个单元格的标签,您可以将标签分配给 annot 属性。

考虑以下代码:


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

>>> heat_map = sb.heatmap(data, annot=True)

>>> plt.show()  

结果如下:

我们可以自定义 annot 值,稍后我们将看到。

调整热图字体大小

我们可以使用seaborn的font_scale属性来调整热图文本的字体大小,如下所示:


>>> sb.set(font_scale=2)  

现在定义并显示热图:


>>> heat_map = sb.heatmap(data, annot=True)

>>> plt.show()  

增加大小后,热图将如下所示:

 

Seaborn 热图颜色条

热图中的颜色条如下所示:

热图的属性cbar是一个布尔属性;它告诉它是否应该出现在情节中。如果未定义 cbar 属性,则默认情况下将在图中显示颜色条。要删除颜色条,请将 cbar 设置为 False:


>>> heat_map = sb.heatmap(data, annot=True, cbar=False)

>>> plt.show()  

要添加颜色条标题,我们可以使用 cbar_kws 属性。

代码如下所示:


>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar'})

>>> plt.show()  

在 cbar_kws 中,我们必须指定我们所引用的颜色条的属性。在我们的示例中,我们指的是颜色条的标签(标题)。

同样,我们可以改变颜色的方向。默认方向是垂直的,如上例所示。

要创建水平颜色条,请定义 cbar_kws 的方向属性,如下所示:


>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'})

>>> plt.show()  

最终的颜色条将如下所示:

 

更改热图颜色条字体大小

如果我们需要更改seaborn所有组件的字体大小,可以使用Seaborn的font_scale属性。

让我们将比例设置为 1.8 并将比例 1 与 1.8 进行比较:


>>> sb.set(font_scale=1.8)

>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'})

>>> plt.show()  

比例 1 的结果:

1.8 的比例将如下所示:

 

更改刻度轴的旋转

我们可以使用所需 ytick 或 xtick 标签的旋转属性来更改刻度标签旋转。

首先,我们这样定义热图:


>>> heat_map = sb.heatmap(data)

>>> plt.show()  

这是一个包含随机数据的常规图,如前一节中所定义。

请注意下图中的原始 yticklabels:

要旋转它们,我们首先获取热图的 yticklabels,然后将旋转设置为 0:


>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=0)  

在 set_yticklabels 中,我们传递了两个参数。第一个获取热图的 yticklabel,第二个设置旋转。上面这行代码的结果将如下所示:

旋转属性可以是任意角度:


>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=35)  

 

在热图上添加文本和值

在前面的部分中,我们仅在热图上添加了值。在本节中,我们将在热图上添加值和文本。

考虑以下示例:

创建随机测试数据:


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

现在为我们将在热图上写入的文本创建一个数组:


>>> text = np.asarray([['a', 'b', 'c', 'd', 'e', 'f'], ['g', 'h', 'i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p', 'q', 'r'], ['s', 't', 'u', 'v', 'w', 'x']])  

现在我们必须将文本与值结合起来,并将结果作为标签添加到热图上:


>>> labels = (np.asarray(["{0}\n{1:.2f}".format(text,data) for text, data in zip(text.flatten(), data.flatten())])).reshape(4,6)  

好的,所以在这里我们传递了文本数组和数据数组中的数据,然后将两个数组展平为更简单的文本并将它们压缩在一起。那么结果就是reshaped创建另一个相同大小的数组,该数组现在包含文本和数据。

新数组存储在名为 labels 的变量中。标签变量将使用 annot 添加到热图中:


>>> heat_map = sb.heatmap(data, annot=labels, fmt='')  

添加除 True 和 False 之外的注释时,应添加 fmt 属性。

绘制该热图时,结果如下:

使用seaborn 热图非常简单。我希望您觉得本教程有用。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Seaborn 热图教程(Python 数据可视化) 的相关文章

  • 如何使用 conda 在一行中安装多个包?

    我需要使用 conda 安装以下多个软件包 我不确定 conda forge 是什么 有些使用 conda forge 有些不使用它 是否可以将它们安装成一行而不需要一一安装 谢谢 conda install c conda forge d
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 最小二乘法拟合直线 python 代码

    我有一个由 X 和 Y 坐标组成的散点图 我想使用直线的最小二乘拟合来获得最佳拟合线 直线最小二乘拟合是指 如果 x 1 y 1 x n y n 是测量数据对 则最佳直线是y A Bx 这是我的Python代码 number of poin
  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • 在 iPython/pandas 中绘制多条线会生成多个图

    我试图了解 matplotlib 的状态机模型 但在尝试在单个图上绘制多条线时遇到错误 据我了解 以下代码应该生成包含两行的单个图 import pandas as pd import pandas io data as web aapl
  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • 如何使用 Celery 多工作人员启用自动缩放?

    命令celery worker A proj autoscale 10 1 loglevel info启动具有自动缩放功能的工作人员 当创建多个工人时 me mypc projects x celery multi start mywork
  • PyArmor - 打包为一个可执行文件

    当我执行此命令时 您好 使用 PyArmor pyarmor pack main py 它将它打包到一个名为的文件夹中dist里面包含我的 exe 以及许多 Python 扩展文件 据我所知 PyArmor 使用 PyInstaller 来
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • 为什么 __instancecheck__ 没有被调用?

    我有以下 python3 代码 class BaseTypeClass type def new cls name bases namespace kwd result type new cls name bases namespace p
  • 用于多个窗口的 Tkinter 示例代码,为什么按钮无法正确加载?

    我正在编写一个程序 应该 按一下按钮即可打开一个窗口 按另一个按钮关闭新打开的窗口 我使用类 以便稍后可以将代码插入到更大的程序中 但是 我无法正确加载按钮 import tkinter as tk class Demo1 tk Frame
  • 线性同余生成器 - 如何选择种子和统计检验

    我需要做一个线性同余生成器 它将成功通过所选的统计测试 我的问题是 如何正确选择发电机的数字以及 我应该选择哪些统计检验 我想 均匀性的卡方频率测试 每代收集10 000个号码的方法 将 0 1 细分为10个相等的细分 柯尔莫哥洛夫 斯米尔
  • 更换壳牌管道[重复]

    这个问题在这里已经有答案了 在 subprocess 模块的 Python 2 7 文档中 我找到了以下片段 p1 Popen dmesg stdout PIPE p2 Popen grep hda stdin p1 stdout stdo
  • 在 HDF5 (PyTables) 中存储 numpy 稀疏矩阵

    我在使用 PyTables 存储 numpy csr matrix 时遇到问题 我收到此错误 TypeError objects of type csr matrix are not supported in this context so
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 如何从 nltk 下载器中删除数据/模型?

    我在 python3 NLTK 中安装了一些 NLTK 包 通过nltk download 尝试过它们 但不需要它们 现在想删除它们 我怎样才能删除例如包large grammars来自我的 NLTK 安装 我不想删除完整的 NLTK 安装
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 使用 SERVER_NAME 时出现 Flask 404

    在我的 Flask 配置中 我将 SERVER NAME 设置为 app example com 之类的域 我这样做是因为我需要使用url for with external网址 如果未设置 SERVER NAME Flask 会认为服务器

随机推荐

  • Linux 中的 su 命令及有用示例

    The su 命令也称为切换用户 该命令用于在登录会话期间成为另一个用户 当没有用户名调用时 su 默认切换到超级用户 基本上 su 命令用于将当前登录的用户更改为另一个用户 而无需从系统注销 它是 Linux 终端用户经常使用的命令 本教
  • 如何在 Amazon Linux 2 上安装 Python 3.11

    Amazon Linux 2 是由 Amazon Web Services AWS 团队开发的操作系统 您可以使用此操作系统启动 Amazon ec2 实例 此外 磁盘映像可用于主要的虚拟机管理程序平台 Python 是一种功能强大的通用编
  • 如何在 Python 中读取文本文件

    使用 Python 应用程序时 您需要使用 Python 读取和写入文本文件 您可以参考我们的其他教程用Python编写文本文件 在 Python 中读取文本文件是一个简单的过程 可以使用几种不同的方法来完成 在本文中 我们将介绍以下在 P
  • 如何在 Ubuntu 18.04、16.04 和 LinuxMint 19/18 上安装和使用 Cordova

    阿帕奇科尔多瓦是一个开源移动开发框架 它允许您使用 HTML5 CSS3 和 JavaScript 等标准 Web 技术进行跨平台开发 避免每个移动平台的原生开发语言 Apache Cordova 命令行需要 Node js 才能在 NPM
  • 如何在 Ubuntu 22.04 上安装 Node.js

    Node正在成为开发者构建前端应用程序的首选 此外 许多开发人员正在使用它来构建 REST API 和 CRUD 该编程语言由 OpenJS 基金会开发 运行在 Chrome 的 v8 引擎上 Node js 适用于大多数现代操作系统 包括
  • 如何在 Ubuntu 18.04 和 16.04 LTS 上安装 Dovecot

    本教程将帮助您在 Ubuntu 系统上安装 Dovecot Dovecot 包为 POP IMAP 协议提供服务 通过这些协议 您可以从远程客户端访问电子邮件帐户 步骤 1 在 Ubuntu 上安装 Dovecot Dovecot 软件包可
  • 使用 Crontab 安排 Cron 作业

    Cron 是一个调度守护进程 按指定的时间间隔执行任务 这些任务称为 cron 作业 主要用于自动化系统维护或管理 例如 您可以设置 cron 作业来自动执行重复任务 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • 如何列出 Debian 上已安装的软件包

    在本指南中 我们将解释如何列出和过滤 Debian 上已安装的软件包 我们还将向您展示如何检查是否安装了特定的软件包 计算已安装的软件包以及找出已安装软件包的版本 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出基
  • 如何在 Ubuntu 18.04 上部署 Odoo 12

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo可以通过多种不同的方式安装 安装 Odoo 最简单 最快的方法是使用
  • 如何从命令行管理 MySQL 数据库和用户

    MySQL 是最流行的开源关系数据库管理系统 MySQL服务器允许我们创建大量的用户和数据库 并授予适当的权限 以便用户可以访问和管理数据库 本教程介绍如何使用命令行创建和管理 MySQL 或 MariaDB 数据库和用户 在你开始之前 在
  • 如何在 CentOS 7 上安装和配置 Redis

    Redis 是一个开源的内存数据结构存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis
  • 列出(显示)MySQL 数据库中的表

    管理时MySQL对于数据库服务器 您将执行的最常见的任务之一就是熟悉环境 这包括列出数据库驻留在服务器上 显示数据库表 或获取有关的信息用户帐户及其权限 本文介绍如何通过命令行列出 MySQL 或 MariaDB 数据库中的表 显示 MyS
  • 野外仍发现心脏出血:您知道自己可能很脆弱吗?

    自 Heartbleed 首次被发现以来已经六年了 OpenSSL 漏洞仍然可以在互联网上被发现和利用 事实上 19 的全球攻击由于大量未修补的面向公众的服务器 我们针对 OpenSSL Heartbleed 漏洞进行了攻击 无论是由于扫描
  • 如何在 Ubuntu 22.04 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 开源 JavaScript 运行时环境 旨在在 Web 浏览器之外执行 JavaScript 代码 它通常用于构建快速且可扩展的服务器端和网络应用程序 npm 是
  • 如何在 Linux 中列出用户

    您是否曾经想要列出 Linux 系统中的所有用户或统计系统中的用户数量 有创建用户 删除用户 列出登录用户的命令 但是在Linux中列出所有用户的命令是什么 本教程将向您展示如何列出 Linux 系统中的用户 使用以下命令获取所有用户的列表
  • 如何在 Ubuntu 18.04 上创建 Python 虚拟环境

    Python 虚拟环境是一个独立的目录树 其中包括 Python 安装和许多附加包 Python虚拟环境的主要目的是为不同的Python项目创建一个隔离的环境 这样您就可以在每个项目的基础上安装特定版本的模块 而不必担心它会影响您的其他 P
  • 如何在 Debian 10 Linux 上安装和配置 Redis

    Redis 是一个开源内存键值数据存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 例如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 并通过 Redis Cluster 跨多个 Redi
  • 如何在 CentOS 8 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 可帮助您自动执行安装 更新 配置和删除 npm 包的过程 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 本教程将指
  • 使用 Python Pandas read_json 读取 JSON 文件

    Pandas read json 函数允许您读取 JSON 文件并将其转换为Pandas数据框 在本教程中 您将学习如何使用 Python 的 Pandas 加载 JSON 文件 处理各种 JSON 格式 自定义列标签 推断数据类型 解析日
  • Seaborn 热图教程(Python 数据可视化)

    在本教程中 我们将使用名为 seaborn 的 Python 库以热图形式表示数据 该库用于基于以下内容可视化数据Matplotlib 您将了解什么是热图 如何创建它 如何更改其颜色 调整其字体大小等等 所以让我们开始吧 目录 hide 1