sns.heatmap()
—— 热力图(Heatmap)
seaborn.heatmap()
用于 可视化矩阵数据,通过 颜色深浅表示数值大小,适用于 相关性分析、数据分布可视化、混淆矩阵展示等。
1. 语法
import seaborn as sns
sns.heatmap(data, annot=False, cmap=None, linewidths=0, linecolor="white", vmin=None, vmax=None)
主要参数
参数 | 作用 |
---|---|
data | 矩阵数据(DataFrame / Numpy 数组) |
annot | 是否 显示数值(True 显示) |
cmap | 颜色方案(如 "coolwarm" 、"Blues" ) |
linewidths | 单元格间隔线宽度 |
linecolor | 单元格间隔线颜色 |
vmin/vmax | 颜色映射的最小/最大值 |
2. 相关性分析
2.1 计算相关性矩阵
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据
data = sns.load_dataset("penguins")
# 计算相关性
corr = data.corr(numeric_only=True)
# 绘制热力图
sns.heatmap(corr, annot=True, cmap="coolwarm", linewidths=0.5)
plt.title("Feature Correlation Heatmap")
plt.show()
📌 作用
corr = data.corr(numeric_only=True)
计算相关性矩阵。annot=True
显示数值,cmap="coolwarm"
设置颜色。- 用于分析特征之间的相关性(-1~1)。
2.2 只显示上三角(去掉重复值)
import numpy as np
mask = np.triu(np.ones_like(corr, dtype=bool)) # 生成上三角 mask
sns.heatmap(corr, annot=True, cmap="coolwarm", mask=mask)
plt.show()
📌 作用
- 只显示 上三角(避免重复信息)。
3. 适用于数据分布分析
3.1 生成随机数据
import numpy as np
# 生成 10x10 矩阵
data = np.random.rand(10, 10)
sns.heatmap(data, cmap="viridis", annot=True)
plt.show()
📌 作用
- 适用于 查看数据分布。
3.2 混淆矩阵可视化
from sklearn.metrics import confusion_matrix
# 生成混淆矩阵
y_true = [0, 1, 1, 2, 2, 2, 0, 1, 2, 0]
y_pred = [0, 0, 1, 2, 2, 1, 0, 2, 2, 0]
cm = confusion_matrix(y_true, y_pred)
sns.heatmap(cm, annot=True, cmap="Blues")
plt.xlabel("Predicted")
plt.ylabel("True")
plt.title("Confusion Matrix")
plt.show()
📌 作用
- 用于分类模型评估。
4. 美观调整
4.1 调整颜色范围
sns.heatmap(corr, annot=True, cmap="coolwarm", vmin=-1, vmax=1)
plt.show()
📌 作用
vmin=-1, vmax=1
限制颜色范围。
4.2 添加边框
sns.heatmap(corr, annot=True, cmap="coolwarm", linewidths=1, linecolor="black")
plt.show()
📌 作用
linewidths=1
添加单元格边框。
5. sns.heatmap()
vs sns.clustermap()
sns.heatmap() | sns.clustermap() | |
---|---|---|
作用 | 静态热力图 | 层次聚类热力图 |
适用于 | 相关性分析、数据分布 | 聚类分析 |
sns.clustermap(corr, annot=True, cmap="coolwarm")
plt.show()
6. 总结
✅ sns.heatmap()
适用于数据分布可视化,尤其是相关性分析、混淆矩阵。
✅ 常见参数
annot=True
显示数值,cmap="coolwarm"
设置颜色,linewidths=1
添加边框。