热图

<image>

<image>

热图（heat map）在二维空间中以颜色的形式显示一个现象的绝对量，是一种数据可视化技术。颜色的变化可能是通过色调或明度，给读者提供明显的视觉提示，说明现象是如何在空间上聚集或变化的。热图有两种完全不同的类别：聚集热图和空间热图。在聚集热图中，幅度被排列成一个固定单元格大小的矩阵，其行和列是离散的现象和类别，行和列的排序是有意的，而且有些随意，目的是暗示聚集或描绘出通过统计分析发现的聚集。单元格的大小是任意的，但足够大，可以清晰可见。相比之下，空间热图中某一量级的位置是由该量级在该空间中的位置所决定的，没有单元的概念，现象被认为是连续变化的。

虽然“热图”是一个新兴的词汇，但是用明暗的矩阵来标示元素的方法已经有超过一世纪的历史了。

## 历史

热图起源于数据矩阵中数值的二维显示。较大的数值用深灰色或黑色的方格（像素）呈现，较小的数值用较浅的方格表示。Loua (1873)使用明暗矩阵来可视化巴黎各区的社会统计数据。Sneath (1957)通过将矩阵的行和列进行换位，将相似的数值按照聚类的方式放在彼此附近，来显示聚类分析的结果。Jacques Bertin使用类似的表示方法来显示符合累积量表的数据。将聚类树连接到数据矩阵的行和列的想法起源于1973年的Robert Ling。Ling使用打印机上的字符来表示不同的灰度，每个像素一个字符宽度。Leland Wilkinson在1994年开发了第一个用高分辨率彩色图形绘制聚集热图的计算机程序（SYSTAT）。

软件设计师Cormac Kinney在1991年注册了“热图”一词的商标，用来描述描述金融市场信息的二维显示。2003年收购Kinney发明的公司无意中让该商标失效。

## 类型

<image>

热图有不同的种类：

- 生物学热图在分子生物学中通常用于表示从DNA微阵列中获得的许多基因在一些可比样本（如不同状态的细胞、不同患者的样本）中的表达水平。
- 树图是数据的二维层次划分，在视觉上类似于热图。
- 拼贴图（Mosaic plot）是表示双向或多向数据表的平铺热图。与树图一样，拼贴图中的矩形区域是分层组织的。这意味着这些区域是矩形而不是正方形。Friendly (1994)调查了该图的历史和使用情况。
- 密度函数可视化是一种用于表示地图中点的密度的热图。它使人们能够感知点的密度，而不受缩放系数的影响。Perrot et al. (2015)提出了一种使用密度函数的方法，利用Spark和Hadoop的大数据基础设施来可视化数十亿和数十亿的点。

## 应用领域

热图因其能够简化数据并提供视觉上易于理解的分析而被广泛应用于多个领域。

### 商业分析

热图在商业分析中用于视觉化呈现公司当前运作状况、业绩表现以及需要改进的领域。热图能够分析公司现有数据并更新以反映增长和其他特定努力，为团队成员和客户提供视觉上的吸引力。

### 网站分析

网站使用多种类型的热图来确定访问用户的行为，通常会结合使用多个热图来洞察网页上表现最好和最差的元素：

- 鼠标追踪热图（Mouse tracking heat map）：也称为悬停图，用于视觉化用户在网站上悬停光标的位置
- 眼动追踪热图（Eye tracking heat map）：测量网站用户的眼睛位置，收集眼睛注视量、注视持续时间和感兴趣区域等测量数据
- 点击追踪热图（Click tracking heat map）：也称为触摸图，帮助视觉化用户的点击行为，不仅追踪可点击组件（如按钮或下拉菜单），还追踪页面上任何位置的非可点击对象
- AI生成注意力热图（AI-generated attention heat map）：使用软件算法确定和预测用户在网页特定区域的注意力
- 滚动追踪热图（Scroll tracking heat map）：表示网站用户的滚动行为，帮助产生视觉提示以显示用户在网站哪个部分停留时间最长

### 探索性数据分析

在处理大小数据集时，数据科学家和数据分析师使用热图来确定数据集中不同点之间的重要关系和特征。热图使得向不同专业的团队成员总结发现和主要组成部分变得视觉上简单。热图能够在高维空间中视觉化这些数据点及其关系，而不会变得过于紧凑和视觉上不吸引人。

### 金融分析

不同产品和资产的价值随时间快速或逐渐波动。记录日常市场变化的能力至关重要，使得能够从模式中得出预测，同时能够重新访问过去的数值数据。热图能够消除繁琐的过程，使用户能够视觉化数据点并在不同表现者之间进行比较。

### 地理视觉化

热图用于视觉化和显示数据的地理分布。热图在地图上表示不同数据点的密度，帮助用户看到某些现象的强度，并显示最重要或最不重要的项目。地理视觉化中使用的热图有时会与面量图混淆，但两者在数据呈现方式上有所不同。

### 体育

热图可用于许多体育项目，并可根据显示的数据高低密度影响经理和教练的决策。用户可以识别比赛中的模式、对手和自己团队的策略，做出更明智的决策以使球员、团队和业务受益，并通过识别需要增强的领域来提高不同方面的表现。热图还视觉化同一体育项目中不同团队之间或不同体育项目之间的比较和关系。

### 网络安全

在入侵检测系统和日志分析中，热图用于突出显示异常访问模式、端口扫描尝试和恶意IP聚类。它们帮助安全运营中心（SOC）分析师快速发现大型数据集中的异常。

### 城市规划

热图在城市规划中用于视觉化交通拥堵、行人流量和环境条件，以实现数据驱动的基础设施发展。环境热图追踪空气质量和城市热岛，指导绿地规划。噪音污染热图有助于居住区附近的分区和缓解。商业规划者使用客流量热图来优化零售布局。整合到智慧城市系统中，这些地图提高了宜居性、可持续性和安全性。

## 生物资讯学中的应用

热图在生物资讯学中广泛应用于视觉化大型和小型数据集。重点是DNA、RNA、基因表现等方面的模式和相似性。

### 聚类热图

聚类热图（Clustered heat map）结合了热图和层次聚类分析，通过将相似的样本或基因聚集在一起来揭示数据中的模式和关系。聚类热图的主要组成部分包括：

- 数据矩阵：以颜色表示数值的二维矩阵，通常行代表基因，列代表样本
- 树状图（Dendrogram）：显示行和列的层次聚类结果的树状结构
- 行列标签：标识数据点，如基因名称或样本编号
- 色标：说明颜色与数值的对应关系

### 层次聚类方法

生成聚类热图时常用的层次聚类方法包括：

- 单连结（Single linkage）：使用最小距离
- 完全连结（Complete linkage）：使用最大距离
- 平均连结（Average linkage）：使用平均距离
- Ward方法：最小化类内方差

常用的距离度量方法包括：

- 欧氏距离（Euclidean distance）
- 皮尔森相关系数（Pearson correlation）
- 曼哈顿距离（Manhattan distance）

### Z-score标准化

在基因表达热图中，通常对数据进行Z-score标准化，以便比较不同表达水平的基因。Z-score按基因（行）计算，公式为：

$$Z = \frac{X - \mu}{\sigma}$$

其中X为特定样本中该基因的表达值，μ为该基因在所有样本中的平均表达值，σ为标准差。

### 软件工具

用于生成生物资讯学热图的常用软件包括：

R语言套件：

- pheatmap：功能全面的聚类热图套件
- heatmap3：改进的热图套件，支持快速聚类
- ComplexHeatmap：支持多重热图并列和复杂注释
- heatmaply：用于生成互动式聚类热图

Python函数库：

- seaborn.clustermap：提供自动树状图生成
- matplotlib：结合scipy和pandas提供灵活绘制

专业平台：

- NG-CHM（Next-Generation Clustered Heat Maps）：由德克萨斯大学MD安德森癌症中心开发的高度互动式热图系统

## 配色

可以使用许多不同的配色方案来说明热图，每种方案都有感知上的优势和劣势。彩虹色彩映射经常被使用，因为相比于灰度的差异，人类更容易感知色彩的明暗，据称这将增加图像中可感知的细节数量。然而，科学界的许多人并不鼓励这样做，原因如下：

- 这些颜色缺乏在灰度或黑体光谱彩色图中发现的自然感知排序。
- 常见的色彩映射（如许多可视化软件包中默认的“jet”色彩映射）在亮度方面的变化不受控制，这使得在显示或印刷时无法有意义地转换为灰度。这也会分散对实际数据的注意力，使黄色和青色区域看起来比实际最重要的数据区域更突出。
- 颜色之间的变化也会导致人们感知到实际并不存在的渐变，使实际的渐变不那么突出，这意味着彩虹色图在很多情况下实际上会掩盖细节，而不是增强细节。
- 彩虹色彩映射中并不是所有的颜色都能被色觉障碍的读者区分，这使得相当一部分人无法使用这些颜色方案的图表。

### 感知均匀配色方案

为克服彩虹色彩映射的缺陷，科学界推荐使用感知均匀（perceptually uniform）的配色方案。

感知均匀色彩映射的特征包括：

- 在CIELAB色彩空间中亮度单调递增
- 数值相近的点具有相似的颜色外观
- 转换为灰度时仍保持有意义的视觉层次
- 对常见的色觉缺陷（色盲）友善

常用的感知均匀配色方案包括：

- Viridis：由蓝色经绿色到黄色的平滑过渡
- Plasma：由蓝色经紫色到黄色
- Inferno：类似黑体辐射，由黑色到黄色
- Magma：由黑色经紫色到白色
- Cividis：viridis的色盲优化版本，对色觉缺陷者特别友善

### 设备兼容性

设备限制也会显著影响热图视觉化的效果。在低分辨率屏幕上显示时，高度详细的颜色渐变可能会出现像素化或条带化，降低视觉化质量。设计者应考虑将显示热图的所有设备及其颜色限制。综合测试和使用颜色较少的方案是创建跨多种设备类型查看的热图时最安全的选择。

### 灰度兼容性

灰度兼容性对于热图的可访问性至关重要，特别是在考虑印刷媒体、黑白显示器或单色视觉时。转换为灰度时，许多配色方案会失去其独特的数据映射，使不同的数值在亮度上看起来相同。灰度友好的配色方案（如viridis系列）即使在去除颜色时也能保持数据点之间的对比。

## 面量图与热图的对比

面量图有时被误称为热图。面量图的特点是在地理边界内有不同的阴影或图案，以显示感兴趣的变量的比例，而热图（在地图上）的颜色变化与地理边界并不能对应上。

## 软件实现

有几种热图软件可免费使用：

- R是一个免费的统计计算和图形软件环境，它包含了几个跟踪热图的功能，包括交互式聚集热图（通过 heatmaply R语言包）。
- Gnuplot是一个通用的免费命令行绘图程序，可以跟踪2D和3D热图。
- Google Fusion Tables可以从Google Sheets电子表格中生成热图，限制在1000点的地理数据。
- Dave Green的'cubehelix'配色方案提供了一种配色方案的资源，这种配色方案可以在黑白postscript设备上打印成单调增加的灰度。
- Openlayers3可以在矢量图层中渲染所有地理特征的选定属性的热图层。
- D3.js、AnyChart和Highcharts是用于数据可视化的JavaScript库，它们提供了创建交互式热图图表的能力，从基本的到高度定制的，都是其解决方案的一部分。
- Qlik Sense允许在热图中以颜色模式显示比较数据，这包含在其可视化捆绑中。
- MATLAB提供了热图可视化的能力，具有多种配置选项。
- Python是广泛用于数据分析和视觉化的语言，支持多个创建热图的函数库：
- Matplotlib的imshow函数将2D数值数组视觉化为色彩编码的图像，可控制色彩映射和坐标轴
- Seaborn的heatmap函数以最少的代码提供美观精致的热图，常与Pandas DataFrame一起使用
- Plotly的go.Heatmap函数创建基于HTML的互动式热图，允许x和y轴标签、2D矩阵、自定义色标和详细的悬停信息

## 例子

<image>

- 大湖效应 – 气象雷达信息通常使用热图显示。

<image>

- 用频谱图可视化的人声；代表STFT幅度的热图。另一种可视化方式是瀑布图。

<image>

- 显示相同数据的热图、曲面图和等高线之间关系的示例

<image>

- 曲面图和热图的组合，其中曲面高度表示函数的振幅，颜色表示相角。

<image>

- 镖靶上每个相邻区域的得分（不按比例）。