Python热力图(Heatmap)绘制详解:数据到可视化全流程指南

一、热力图的核心用途

热力图(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/False
    fmt 数值显示格式 '.2f'(两位小数)
    linewidths 单元格边框宽度 0.5-1.0
    alpha 透明度控制(地理热力图) 0.3-0.7
    s 点大小(地理热力图) 数值数组

    五、结果解读技巧

    1. 颜色梯度分析

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

    6. 对角线元素为 1(自相关)
    7. 越接近 1 的数值表示正相关性越强
    8. 越接近 – 1 的数值表示负相关性越强
    9. 地理热力图

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

    六、常见问题处理

    1. 数据标准化

      python

      from sklearn.preprocessing import MinMaxScaler
      scaler = 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.hour
      pivot_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. 结合业务场景选择矩阵 / 地理 / 时间型热力图

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

    作者:葡萄味安慕希

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python热力图(Heatmap)绘制详解:数据到可视化全流程指南

    发表回复