MCM520 ← 资料站首页 图表选择可视化指南:热力图:看矩阵与强度(深度版) 打开交互阅读器 →

图表选择可视化指南:热力图:看矩阵与强度(深度版)

用颜色深浅表达二维矩阵中每个格子的数值大小,适合相关性矩阵、混淆矩阵、密度。

分类:📊 统计图 适用:相关系数矩阵、混淆矩阵、时空密度

一、这个图适合谁(适用场景)

  • 相关系数矩阵
  • 混淆矩阵
  • 时空密度

二、图表结构要素

  1. 行×列=矩阵
  2. 颜色=数值
  3. 配标准色阶
  4. 可加数值标注

三、可视化的底层逻辑

热力图用"颜色(色相/饱和度)"通道把二维矩阵的标量值压缩成一张图,擅长呈现"多对多"关系的结构模式(哪块强、哪块弱、是否成块)。但必须清醒:颜色在感知精度档中排倒数(低于位置/长度/角度),人对"这个格子比那个深多少"的判断很不可靠。所以热力图是"找模式"的工具,不是"读精确值"的工具——凡是需要精确比较的地方,必须辅以数值标注。核心思想:用颜色表达强度的相对结构,用顺序/发散色阶保留数值语义(正负的符号、大小的方向),绝不能用彩虹这类感知不均匀的色阶去编码有序数值。

四、视觉编码与感知推导

颜色映射与色阶选择:颜色 c=f(v)c=f(v)。发散色阶(蓝-白-红)用于有零中心的区间 v∈[−a,a]v\in[-a,a]:

c(v)={蓝,v<0白,v=0红,v>0 c(v)=\begin{cases}\text{蓝},&v<0\\\text{白},&v=0\\\text{红},&v>0\end{cases}

使符号与强度同时可读;顺序色阶(单色由浅入深)用于 v≥0v\ge0。标准化

z=v−μσ z=\frac{v-\mu}{\sigma}

消除量纲,避免大数量级格子"吸走"全部颜色动态范围。

感知均匀性:在 CIELAB 空间中,等感知差应对应等 ΔE\Delta E。彩虹色阶在蓝-绿-黄段感知不均匀(黄色区被压缩),会造成"视觉上差异大、实际数值差小"的误读,故学术论文推荐顺序/发散的感知均匀色阶(如 viridis、RdBu)。

关系矩阵重排:相关系数矩阵经聚类得到置换 PP,重排为 PTMPP^T M P 使同源块聚集在对角线附近,结构一目了然;不重排则强相关格子散落,模式被掩盖。

五、怎么画(步骤)

  1. 先 standardize 再上色,避免量纲掩盖结构。
  2. 用发散色阶(如蓝-白-红)表现正负。
  3. 相关系数矩阵上三角可省略避免重复。
  4. 加数值标签便于精确读。
  5. 类别顺序按聚类重排更易读。

六、何时用 / 何时不用 / 常见丑图

  • 何时用:『多对多』关系的强度对比。
  • 何时不用:单序列 → 折线/柱状。
  • 常见丑图:彩虹色阶难辨、不标准化、无标注。

七、常见坑

  • 未标准化色阶失准
  • 彩虹色阶误导
  • 忽略重排顺序

八、画图自检清单

  • 已标准化
  • 色阶合理(发散/连续)
  • 关键格有标注
  • 顺序已优化

九、配套资源与搭配

  • 评价类问题怎么选方法
  • Python 数据可视化模板
  • 论文图表规范与排版

本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。

十、实战案例——Python 绘制 + 图效果

热力图用颜色深浅表达二维矩阵数值,最适合展示相关性矩阵或混淆矩阵。

案例场景:分析房价与面积、房龄、楼层、距地铁距离、绿化率 5 个因素的相关系数。
红色=正相关,绿色=负相关。面积与房价 0.82 强正相关,房龄与房价 -0.55 负相关。

完整代码(Python + matplotlib)

import matplotlib.pyplot as plt
import numpy as np

labels = ['面积', '房龄', '楼层', '距地铁', '绿化率', '房价']
M = np.array([
    [1.00, -0.62, 0.10, 0.28, 0.35, 0.82],
    [-0.62, 1.00, -0.08, -0.31, -0.22, -0.55],
    [0.10, -0.08, 1.00, 0.12, 0.05, 0.08],
    [0.28, -0.31, 0.12, 1.00, 0.20, 0.45],
    [0.35, -0.22, 0.05, 0.20, 1.00, 0.60],
    [0.82, -0.55, 0.08, 0.45, 0.60, 1.00],
])

plt.figure(figsize=(7, 5))
im = plt.imshow(M, cmap='RdYlGn', vmin=-1, vmax=1, aspect='auto')
plt.colorbar(im, shrink=0.8, label='相关系数')
plt.xticks(range(6), labels, rotation=30, ha='right', fontsize=10)
plt.yticks(range(6), labels, fontsize=10)
for i in range(6):
    for j in range(6):
        plt.text(j, i, f'{M[i][j]:.2f}', ha='center', va='center',
                 fontsize=9, fontweight='bold',
                 color='white' if abs(M[i][j]) > 0.5 else 'black')
plt.title('房价影响因素相关性热力图', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

运行效果图

图X5  房价影响因素相关性热力图


本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。