用 Python 绘制热力图(Heatmap)详解:从数据到可视化全流程(第三天) In 世界杯晋级规则 @2025-05-08 06:15:57

一、热力图的核心用途

热力图(Heatmap)是一种通过颜色深浅表示数据密度或数值大小的可视化工具,主要应用场景包括:

数据矩阵的模式识别(如相关性分析)用户行为热点分析(如网页点击热力图)地理区域数据分布(如疫情病例密度)时间序列的周期性变化(如电商订单时段分布)

二、技术准备

1. 安装必要库

pip install matplotlib seaborn pandas numpy

2. 数据准备

示例 1:矩阵型数据(相关性分析)

import numpy as np

import pandas as pd

# 生成随机数据(10个样本,5个特征)

data = pd.DataFrame(np.random.rand(10,5), columns=['A','B','C','D','E'])

# 计算相关系数矩阵

corr_matrix = data.corr()

print(corr_matrix.head())

示例 2:地理型数据(区域销售数据)

geo_data = pd.DataFrame({

'城市': ['北京','上海','广州','深圳','杭州'],

'纬度': [39.90, 31.23, 23.13, 22.54, 30.26],

'经度': [116.40, 121.47, 113.27, 114.05, 120.19],

'销售额': [150, 200, 180, 220, 160]

})

三、绘制热力图的完整代码(含详细注释)

方案一:使用 Seaborn 绘制矩阵热力图

import seaborn as sns

import matplotlib.pyplot as plt

# 创建画布

plt.figure(figsize=(10,8))

# 绘制热力图

sns.heatmap(

data=corr_matrix, # 输入数据矩阵

annot=True, # 显示数值标签

fmt=".2f", # 数值保留两位小数

cmap='coolwarm', # 颜色映射方案(冷暖对比)

linewidths=0.5, # 分隔线宽度

cbar_kws={'label': '相关系数'}, # 颜色条标签

annot_kws={'fontsize':12} # 标签字体大小

)

# 设置标题和坐标轴标签

plt.title('特征相关性热力图', fontsize=14)

plt.xlabel('特征', fontsize=12)

plt.ylabel('特征', fontsize=12)

# 优化布局

plt.tight_layout()

# 保存并显示

plt.savefig('correlation_heatmap.png', dpi=300)

plt.show()

方案二:使用 Matplotlib 绘制地理热力图

from mpl_toolkits.basemap import Basemap

# 创建地图投影

plt.figure(figsize=(12,8))

m = Basemap(

projection='merc', # 墨卡托投影

llcrnrlat=20, # 左下角纬度

urcrnrlat=40, # 右上角纬度

llcrnrlon=100, # 左下角经度

urcrnrlon=130, # 右上角经度

resolution='l' # 地图精度

)

# 绘制海岸线和国家边界

m.drawcoastlines()

m.drawcountries()

# 转换经纬度坐标

x, y = m(geo_data['经度'].tolist(), geo_data['纬度'].tolist())

# 绘制热力点

m.scatter(

x, y,

s=geo_data['销售额']*5, # 点大小与销售额成正比

c=geo_data['销售额'], # 颜色映射销售额

cmap='YlOrRd', # 黄-红渐变

alpha=0.6, # 透明度

edgecolors='w' # 白色边框

)

# 添加颜色条

plt.colorbar(label='销售额(万元)', shrink=0.8)

# 设置标题

plt.title('中国主要城市销售额分布热力图', fontsize=14)

# 保存并显示

plt.savefig('geo_heatmap.png', dpi=300)

plt.show()

四、关键参数解读

参数名作用说明常用值示例data输入数据矩阵pandas.DataFrame 或 numpy 数组cmap颜色映射方案'coolwarm', 'viridis', 'YlOrRd'annot是否显示数值标签True/Falsefmt数值显示格式'.2f'(两位小数)linewidths单元格边框宽度0.5-1.0alpha透明度控制(地理热力图)0.3-0.7s点大小(地理热力图)数值数组

五、结果解读技巧

颜色梯度分析:

冷色调(蓝 / 绿)表示低数值区域暖色调(红 / 黄)表示高数值区域中间色表示中等数值 矩阵热力图:

对角线元素为 1(自相关)越接近 1 的数值表示正相关性越强越接近 - 1 的数值表示负相关性越强 地理热力图:

密集区域表示业务集中颜色深浅反映数值大小点大小体现第三维度数据

六、常见问题处理

数据标准化:

python

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

scaled_data = scaler.fit_transform(data)

处理 NaN 值:

python

data = data.fillna(0) # 填充0值

# 或

data = data.dropna() # 删除缺失行

调整颜色范围:

python

vmin=0, vmax=100 # 强制颜色范围

七、扩展应用

时间序列热力图:

python

# 示例:电商订单时段分布

time_data = pd.read_csv('order_data.csv', parse_dates=['order_time'])

time_data['hour'] = time_data['order_time'].dt.hour

pivot_table = time_data.pivot_table(index='hour', columns='dayofweek', aggfunc='size')

sns.heatmap(pivot_table, cmap='Blues')

用户行为热力图:

python

# 示例:网页点击热区

click_data = pd.read_csv('click_log.csv')

plt.figure(figsize=(12,8))

plt.hist2d(click_data['x'], click_data['y'], bins=50, cmap='Reds')

plt.colorbar(label='点击次数')

八、总结

热力图是数据可视化中的 "信息浓缩器",通过颜色编码实现多维度数据的高效传达。掌握以下要点可提升图表质量:

选择合适的颜色映射方案(避免彩虹色系)合理设置数值标签和边框注意数据标准化和异常值处理结合业务场景选择矩阵 / 地理 / 时间型热力图

通过调整参数和组合其他图表类型(如折线图叠加),可以创造出更丰富的可视化效果。建议读者根据实际数据特点灵活运用。

牧马人rubicon报价
vivo X23实拍图赏:玻璃上的新花样