热力图(Heatmap)是一种二维数据可视化工具,通过颜色的深浅来表示数据大小的差异,非常适合用来展示矩阵数据的分布、相关性或其他指标。

实际案例数据

我们以一个学生考试成绩矩阵为例,展示不同学生在不同科目上的得分。以下是数据:

学生姓名 数学 英语 物理 化学 生物 张三 80 85 78 92 88 李四 70 75 82 85 90 王五 88 80 86 80 85 赵六 60 65 70 75 72 陈七 95 90 85 88 92
使用 Seaborn 绘制热力图

以下是基于上述数据绘制热力图的完整代码:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 创建数据
data = pd.DataFrame({
"学生姓名":["张三","李四","王五","赵六","陈七"],
"数学":[80,70,88,60,95],
"英语":[85,75,80,65,90],
"物理":[78,82,86,70,85],
"化学":[92,85,80,75,88],
"生物":[88,90,85,72,92]
})

# 将学生姓名设置为索引
data.set_index("学生姓名", inplace=True)

# 绘制热力图
plt.figure(figsize=(10,6))
sns.heatmap(data, annot=True, fmt="d", cmap="YlGnBu", linewidths=0.5)

# 设置标题
plt.title("学生考试成绩热力图", fontsize=16)

# 显示图表
plt.show()
代码解析1. 创建数据

data = pd.DataFrame({
"学生姓名":["张三","李四","王五","赵六","陈七"],
"数学":[80,70,88,60,95],
"英语":[85,75,80,65,90],
"物理":[78,82,86,70,85],
"化学":[92,85,80,75,88],
"生物":[88,90,85,72,92]
})
  • Pandas 数据框

    • • 我们使用 Pandas 创建一个数据框,表示学生的考试成绩。

    • • 每一行是一个学生,每一列是一个科目,单元格的值是对应学生的科目得分。

data.set_index("学生姓名", inplace=True)
  • 设置索引

    • • 使用set_index()方法,将学生姓名设置为索引,方便在热力图中展示横轴为学生姓名。

2. 绘制热力图

plt.figure(figsize=(10, 6))
sns.heatmap(data, annot=True, fmt="d", cmap="YlGnBu", linewidths=0.5)
  • • **plt.figure(figsize=(10, 6))**:

    • • 设置热力图的图表尺寸,figsize=(10, 6)表示宽度为 10,长度为 6。

  • • **sns.heatmap()**:

    • • 使用 Seaborn 的heatmap函数绘制热力图。

    • data:传入的数据框(矩阵)。

    • annot=True:在每个单元格内显示数值。

    • fmt="d":指定单元格数值的格式为整数(d)。

    • cmap="YlGnBu":设置颜色映射为 "黄色到绿色到蓝色" 渐变。

    • linewidths=0.5:设置单元格之间的间隔线宽度为 0.5。

3. 添加标题

plt.title("学生考试成绩热力图", fontsize=16)
  • • 为热力图添加标题,并设置字体大小。

4. 显示图表

plt.show()
  • • 使用plt.show()显示生成的热力图。

打开网易新闻 查看精彩图片
在这里插入图片描述 图表分析

运行代码后,生成的热力图将具有以下特点:

  1. 1.颜色表示值大小

  • • 热力图的颜色从浅黄色(低分)逐渐过渡到深蓝色(高分),反映不同科目的得分大小。

2.单元格注释

  • • 每个单元格内显示具体的得分值,例如 "张三" 在 "数学" 中的得分是 80。

3.对比直观

  • • 从颜色上可以直观地看出哪些学生在哪些科目表现较好(深蓝色),哪些科目表现较差(浅黄色)。

扩展优化1. 标准化数值

可以通过标准化数据,展示学生在不同科目上的相对表现(如百分制)。

data_normalized = data / 100
sns.heatmap(data_normalized, annot=True, fmt=".2f", cmap="coolwarm")
  • data / 100:将原始数据标准化为 [0, 1] 范围。

  • fmt=".2f":格式化数值为小数点后两位。

2. 调整颜色映射

更改颜色映射为其他渐变,如红色到蓝色。

sns.heatmap(data, annot=True, fmt="d", cmap="RdBu", linewidths=0.5)
  • cmap="RdBu":使用红色到蓝色渐变,适合表示正负值的数据。

3. 添加颜色条

显示颜色条,用于解释颜色与数值的对应关系。

sns.heatmap(data, annot=True, fmt="d", cmap="YlGnBu", cbar=True)
  • cbar=True:在热力图旁边添加颜色条。

总结

通过上述案例,我们学习了如何使用 Seaborn 绘制热力图,并用学生考试成绩作为实际案例展示数据分布。

热力图的应用场景

  1. 1.数据分布分析:观察矩阵数据的强弱分布。

  2. 2.相关性矩阵:展示变量之间的相关性(如股票收益的相关性)。

  3. 3.性能指标比较:比较不同个体在不同维度的表现。

Seaborn 的热力图功能强大且易用,通过不同的颜色映射和样式配置,可以满足多种可视化需求。