> 技术文档 > 用 Python 绘制热力图(Heatmap)详解:从数据到可视化全流程(第三天)_python 热力图

用 Python 绘制热力图(Heatmap)详解:从数据到可视化全流程(第三天)_python 热力图


一、热力图的核心用途

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

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

二、技术准备

1. 安装必要库

pip install matplotlib seaborn pandas numpy

 2. 数据准备

示例 1:矩阵型数据(相关性分析)
import numpy as npimport 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 snsimport 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/False fmt 数值显示格式 \'.2f\'(两位小数) linewidths 单元格边框宽度 0.5-1.0 alpha 透明度控制(地理热力图) 0.3-0.7 s 点大小(地理热力图) 数值数组

五、结果解读技巧

  1. 颜色梯度分析

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

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

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

六、常见问题处理

  1. 数据标准化

    python

    from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()scaled_data = scaler.fit_transform(data)
  2. 处理 NaN 值

    python

    data = data.fillna(0) # 填充0值# 或data = data.dropna() # 删除缺失行
  3. 调整颜色范围

    python

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

七、扩展应用

  1. 时间序列热力图

    python

    # 示例:电商订单时段分布time_data = pd.read_csv(\'order_data.csv\', parse_dates=[\'order_time\'])time_data[\'hour\'] = time_data[\'order_time\'].dt.hourpivot_table = time_data.pivot_table(index=\'hour\', columns=\'dayofweek\', aggfunc=\'size\')sns.heatmap(pivot_table, cmap=\'Blues\')
  2. 用户行为热力图

    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=\'点击次数\')

    八、总结

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

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

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