可视化是理解数据并得出信息丰富且可操作的见解的重要方法。 良好的视觉效果可以让读者一眼就能对信息有基本的了解。
用于查看数据的流行可视化是热图。 在本文中,我将解释热图以及如何使用 Matplotlib、Seaborn 和 Plotly 在 Python 中创建热图。
目录
什么是热图?
热图是将数据表示为点矩阵或网格的二维图像。 颜色图的阴影代表每个数据点。 较深的色调比较浅的色调表示更高的值。
热图可以轻松识别数据的模式、趋势和变化。 它们提供汇总信息,使用户可以快速查看高值或低值、聚类或异常值的区域。
热图用在哪里?
热图有助于显示值如何随空间变化。 日常用例包括:
天气
大多数人见过的最流行的热图是字面热图——显示不同地方的温度变化。
这是天气预报的示例 每日快报 将预期温度显示为热图。 这使得更容易想象哪些地方会很热、很冷或介于两者之间。
显示网站/应用程序使用情况
来源: 热罐
通过跟踪鼠标移动、点击和滚动模式,热图有助于识别网页中受欢迎或被忽视的区域。 然后,这可以用于优化用户界面并增强用户体验。
医学影像
来源: 研究门网
热图可视化身体中高或低活动的区域。 这可以识别异常和疾病,并评估癌症等疾病的进展或治疗反应。
用于在 Python 中创建热图的库
Python 是一种流行的数据分析和可视化语言。 这是因为它简单的语法和广泛的生态系统。 您可以使用多个库在 Python 中创建热图。 这些包括:
- Matplotlib – 一个流行的数据可视化库。 它是一个低级库,提供更多自定义选项,但很复杂。
- Seaborn – 这个可视化库构建在 Matplotlib 之上,简化了它的一些功能,同时提供了更好看的可视化效果。
- Plotly – 这是一个可视化库,提供易于使用的 API,用于在 Python 中创建热图。
在下一节中,我们将探讨如何使用所有这些库创建热图。
如何生成热图?
在本节中,我将探讨如何使用 Matplotlib、Seaborn 和 Plotly 创建热图。 为了编码,我将使用 谷歌合作实验室。 它是一个免费使用的 Python Notebook 实例,它使用 Google 基础设施来运行您的代码。 它不需要任何设置,因此您也可以使用它来进行操作。 首先,我们将首先介绍 Matplotlib。
Matplotlib
首先,我们首先导入 Matplotlib 库。
import matplotlib.pyplot as plt
我们还需要 NumPy 来生成随机数据集。
import numpy as np
为了生成数据集,我们将添加以下代码:
# Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
为了绘制数据,我们使用 imshow 方法。 我们传入数据作为参数。 我们可以通过传递稍后将讨论的其他参数来做更多事情。
plt.imshow(data)
如果运行该单元,您应该会看到热图。
虽然这很棒,但您可以使用许多自定义选项。 对于初学者,您可以使用传递给 imshow 的 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 # Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Creating a plot with blue as a color plt.imshow(data, cmap = 'Blues') # Displaying a color bar plt.colorbar() # Annotating values 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", ) # Creating lists of tick labels x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] # Adding the tick labels 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 是一个构建在 Matplotlib 之上的库。 它提供了更容易使用的抽象。 要创建热图,我们首先导入要使用的库。
import matplotlib.pyplot as plt import numpy as np import seaborn as sn
我们导入了 Matplotlib,因为 Seaborn 需要它。 接下来,我们还需要导入 NumPy 来生成随机数据集。 最后,我们必须导入 Seaborn。
接下来,我们使用 NumPy 生成数据集。
# Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10))
完成此操作后,我们创建刻度标签列表。
# Tick labels 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,该过程与 Seaborn 类似。 以下是在 Plotly 中创建热图的代码概要:
import plotly.express as px import numpy as np # Creating a seed for reproducibility np.random.seed(2) # Generating 10 x 10 array of integers between 1 and 50 data = np.random.randint(low = 1, high = 50, size = (10, 10)) # Tick labels 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 上提供简化的抽象。 热图的一项重要用途是跟踪人们如何使用您的网站。
接下来,查看热图工具,它可以告诉您用户的点击位置。