[Explained] 如何在 Python 中创建热图

理解数据可视化:热图的应用与Python实现

数据可视化是理解数据并从中获取深刻见解的关键方法。通过有效的视觉呈现,读者可以快速掌握信息的核心要点。其中,热图是一种常用的数据可视化工具,它能够以直观的方式展示数据的分布和变化趋势。本文将深入探讨热图的概念,并介绍如何利用Python中的Matplotlib、Seaborn和Plotly库来创建热图。

什么是热图?

来源:seaborn.pydata.org

热图本质上是一种二维图像,它使用颜色深浅来表示数据矩阵或网格中的数值大小。颜色越深,通常代表数值越高;反之,颜色越浅,则代表数值越低。通过这种方式,热图可以帮助我们快速识别数据中的模式、趋势和异常值,从而更有效地理解数据。

热图的优势在于其简洁明了的呈现方式,能够快速汇总信息,让用户一眼就能识别出高值区、低值区、聚集区或异常值。这使得热图在数据分析和决策过程中扮演着重要角色。

热图的应用场景

热图在多个领域都有广泛的应用,它能够有效地展示数值随空间的变化情况。以下是一些常见的应用场景:

天气

天气预报中,热图被用来展示不同地区的温度分布情况。例如,像 每日快报 这样的新闻媒体,经常会使用热图来直观地展示气温分布,帮助人们了解哪些地区较热、哪些地区较冷。

网站/应用程序使用情况

来源:热罐

在网站和应用程序分析中,热图可以跟踪用户的鼠标移动、点击和滚动行为,从而识别出用户最关注或最容易忽略的页面区域。这对于优化用户界面和提升用户体验至关重要。

医学影像

来源:研究门网

医学影像领域,热图可以可视化人体内部的活动水平。例如,它可以帮助医生识别异常区域,诊断疾病,并评估癌症等疾病的进展和治疗效果。

Python中用于创建热图的库

Python是数据分析和可视化领域的首选语言,这得益于其简洁的语法和丰富的库生态系统。在Python中,你可以使用多个库来创建热图,其中包括:

  • Matplotlib:一个功能强大的底层数据可视化库,提供了高度的自定义选项,但使用起来可能相对复杂。
  • Seaborn:建立在Matplotlib之上的可视化库,简化了Matplotlib的部分功能,并提供了更美观的默认可视化效果。
  • Plotly:一个交互式可视化库,提供了易于使用的API,可以轻松创建各种类型的图表,包括热图。

接下来,我们将详细介绍如何使用这些库来创建热图。

如何生成热图?

本节将逐步讲解如何使用Matplotlib、Seaborn和Plotly来创建热图。 为了方便代码演示,我们使用 Google Colab,这是一个免费的Python Notebook实例,可以让你在云端运行Python代码,无需进行任何环境配置。首先,我们从Matplotlib开始。

Matplotlib

首先,导入Matplotlib库:

import matplotlib.pyplot as plt

同时,我们需要导入NumPy来生成随机数据集:

import numpy as np

以下代码用于生成数据集:

# 设置随机种子,保证结果可重复
np.random.seed(2)

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

使用imshow方法绘制热图,传入数据作为参数:

plt.imshow(data)

运行代码后,你会看到一个基本的颜色热图。

Matplotlib允许你进行更多的自定义设置。例如,可以通过cmap参数修改热图的颜色方案。以下代码将颜色方案设置为蓝色:

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

你可以查看 这里 获取完整的颜色方案列表。 修改颜色后的热图如下:

为了方便理解,添加颜色条可以帮助解释颜色所代表的数值:

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.xticksplt.yticks为轴添加刻度标签:

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)

# 生成随机数据
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和Plotly来简化热图的创建过程。

Seaborn

Seaborn是一个基于Matplotlib的库,它提供了更简洁的API和更美观的默认设置。首先,导入所需的库:

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

与Matplotlib类似,我们需要NumPy来生成随机数据。同时,我们导入了Seaborn和Matplotlib。接下来,生成随机数据集:

# 设置随机种子
np.random.seed(2)

# 生成随机数据
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)

sn.heatmap()函数接收多个参数:

  • data: 要绘制的数据集。
  • cmap: 颜色方案。
  • annot: 是否显示单元格的数值。
  • yticklabels: 纵轴刻度标签列表。
  • xticklabels: 横轴刻度标签列表。

最后,使用plt.show()展示图像:

plt.show()

生成的Seaborn热图如下:

Plotly

使用Plotly创建热图的过程与Seaborn类似。以下是使用Plotly创建热图的代码:

import plotly.express as px
import numpy as np

# 设置随机种子
np.random.seed(2)

# 生成随机数据
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")

Plotly使用px.imshow()函数来创建热图。该函数接收数据作为位置参数,并接收如下的关键字参数:

  • text_auto: 布尔值,设置为True时启用数值标签。
  • x: x轴刻度标签列表。
  • y: y轴刻度标签列表。
  • color_continuous_scale: 颜色方案。

与Seaborn和Matplotlib相比,Plotly的使用更加简洁。此外,Plotly生成的图形是交互式的,更方便用户探索数据。

以下是Plotly生成的热图的截图:

总结

本文介绍了如何在Python中创建热图,并详细讲解了Matplotlib、Seaborn和Plotly这三个主要的库的使用方法。Seaborn和Plotly相对于Matplotlib而言,提供了更加简洁的API和交互式的可视化体验。热图在数据分析领域有广泛的应用,例如跟踪网站用户行为等。

希望本文能够帮助你更好地理解和使用热图。接下来,你可以深入了解热图工具,以更好地了解用户在网站上的点击行为。