[解释] 如何在Python中创建热力图

可视化是理解数据和绘制信息丰富且可操作的见解的重要方式。一个好的可视化图表可以让读者通过一瞥就对信息有一个基本的了解。

用于查看数据的一种流行的可视化图表是热力图。在本文中,我将解释什么是热力图以及如何使用matplotlib、seaborn和plotly在python中创建一个热力图。

什么是热力图?

来源: seaborn.pydata.org

热力图是一个二维图像,将数据表示为矩阵或点阵。每个数据点都用一种颜色的阴影来表示。较深的颜色表示较高的值,较浅的颜色表示较低的值。

热力图可以方便地识别数据中的模式、趋势和变化。它们提供了摘要信息,使用户可以快速查看高值或低值区域、聚类或异常值。

热力图在哪些领域中使用?

热力图有助于显示数值在空间上的变化。每天的使用案例包括:

天气

大多数人见过的最受欢迎的热力图是一张字面上的热力图-显示不同地方的温度变化。

这是来自每日快报的一个天气预报示例,显示了预期温度的热力图。这样更容易可视化哪些地方会很热、很冷或介于两者之间。

显示网站/应用程序使用情况

来源: hotjar

通过跟踪鼠标移动、点击和滚动模式,热力图有助于识别网页的受欢迎或被忽视的区域。这可以用来优化用户界面和提高用户体验。

医学成像

来源: researchgate.net

热力图可视化身体中的高活动或低活动区域。这可以识别异常和疾病,并评估癌症等疾病的进展或治疗反应。

用于在python中创建热力图的库

python是一种流行的数据分析和可视化语言。这是因为它简单的语法和广泛的生态系统。有多个库可以用于在python中创建热力图。其中包括:

  • matplotlib – 一种流行的数据可视化库。它是一个低级别的库,提供了更多的自定义选项,但比较复杂。
  • seaborn – 这个可视化库是建立在matplotlib之上的,简化了一些函数,同时提供了更好看的可视化效果。
  • plotly – 这是一个可视化库,提供了一个易于使用的api来创建python中的热力图。

在下一节中,我们将探讨如何使用所有这些库来创建热力图。

如何生成热力图?

在本节中,我将探索如何使用matplotlib、seaborn和plotly创建热力图。要编码,我将使用google colab。它是一个免费使用的python笔记本实例,使用google基础设施来运行你的代码。它不需要设置,所以你也可以使用它来跟随学习。首先,我们将首先介绍matplotlib。

matplotlib

首先,我们导入matplotlib库。

import matplotlib.pyplot as plt

我们还需要numpy来生成一个随机数据集。

import numpy as np

要生成数据集,我们将添加以下代码:

# 创建一个用于再现的种子
np.random.seed(2)

# 生成一个10 x 10的整数数组,范围在1到50之间
data = np.random.randint(low = 1, high = 50, size = (10, 10))

要绘制数据,我们使用imshow方法。我们将data作为参数传入。我们还可以通过传递其他参数来做更多事情,稍后我们将进一步讨论。

plt.imshow(data)

如果你运行该单元格,你应该会看到一个热力图。

虽然这很棒,但你可以有很多自定义选项可供选择。首先,你可以使用cmap参数来改变图像中使用的颜色。例如,如果你想将热力图使用不同的蓝色阴影,你可以使用以下代码生成图形。

plt.imshow(data, cmap = 'blues')

cmap选项的完整列表可以在这里找到。无论如何,以上代码的结果如下:

如果有一个键来解释颜色代表什么将会更有用。为了做到这一点,添加以下代码:

plt.colorbar()

之后,你应该会得到一个像这样的图形:

颜色条很有用,但在某些情况下,你可能想要注释不同的值,以便观察者可以准确地看到表示什么。为了做到这一点,你可以使用plt.text()在每个单元格中写入文本。

for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment='center',
         verticalalignment='center',
      )

我们将对热力图做的最后一件事是设置坐标轴上的刻度标签。我们将使用plt.xticks函数处理x轴,使用plt.yticks函数处理y轴。这些方法的调用方式相同,唯一的区别是它们影响的轴。

第一个参数是插入刻度标记的位置列表。这表示为索引的数组。以下参数是实际要插入的标签列表。以下是如何插入刻度的示例:

x_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

这就是了!这就是您在matplotlib中创建热图的方法。完整的代码解决方案如下。

import numpy as np
import matplotlib.pyplot as plt

# 为可重现性创建种子
np.random.seed(2)

# 生成1到50之间的10x10整数数组
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# 创建一个蓝色的图
plt.imshow(data, cmap = 'blues')

# 显示颜色条
plt.colorbar()

# 注释数值
for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment='center',
         verticalalignment='center',
      )

# 创建刻度标签列表
x_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# 添加刻度标签
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

但是,使用matplotlib并不是最简单的解决方案。接下来,我们将看到其他库,如seaborn和matplotlib,简化了构建热图的过程。

seaborn

在本节中,我们将使用seaborn重新创建前面的示例。seaborn是构建在matplotlib之上的库。它提供了简化工作的抽象。要创建一个热图,我们首先导入要使用的库。

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

我们导入matplotlib是因为seaborn需要它。接下来,我们还需要导入numpy来生成一个随机数据集。最后,我们必须导入seaborn。

接下来,我们使用numpy生成数据集。

# 为可重现性创建种子
np.random.seed(2)

# 生成1到50之间的10x10整数数组
data = np.random.randint(low = 1, high = 50, size = (10, 10))

在这样做后,我们创建了刻度标签列表。

# 刻度标签
x_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

最后,我们通过调用sn模块的heatmap函数创建实际的热图。

hm = sn.heatmap(data = data, cmap = 'oranges', annot = true, yticklabels = y_labels, xticklabels = x_labels)

正如您所看到的,我们传递了几个参数。下面是每个参数的说明:

  • data是我们要绘制的数据集
  • cmap是我们想要使用的颜色方案来创建热图
  • annot指定是否要用实际值注释数据点
  • yticklabels是我们希望用于垂直轴刻度的标签列表
  • xticklabels是用于水平轴刻度的标签列表。

最后,我们使用以下代码显示图表:

plt.show()

这将生成以下热图:

plotly

对于plotly来说,流程与seaborn类似。下面是在plotly中创建热图的代码概述:

import plotly.express as px
import numpy as np

# 创建可重现性的种子
np.random.seed(2)

# 生成一个10x10的整数数组,范围在1到50之间
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# 刻度标签
x_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

px.imshow(data, text_auto = true, x = x_labels, y = y_labels, color_continuous_scale= 'greys')

如你所见,热图是在最后一行使用px.imshow()函数生成的。该函数接受要绘制的数据作为位置参数。此外,它还接受以下关键字参数:

text_auto是一个布尔值,当设置为true时启用注释
x是x轴刻度标签的列表
y是y轴刻度标签的列表
color_continuous_scale确定用于图形的颜色方案。

如你所见,plotly比seaborn和matplotlib更简单。此外,生成的图是交互式的,与其他生成静态图像的库相比更为灵活。

这是最终结果的截图:

最后的话

在本文中,我们介绍了如何在python中创建热图。我们涵盖了主要的库- matplotlib、seaborn和plotly。我们还看到了seaborn和plotly如何简化matplotlib的抽象。热图的一个关键用途是追踪人们如何使用你的网站。

接下来,可以查看告诉你用户点击位置的heatmap工具

类似文章