如何用Python绘制含X、Y坐标与Z热度值的热力图
如何用X、Y坐标和Z热度值绘制热力图?
你的DataFrame是长格式(每行对应一个坐标点的热度),而绘制热力图通常需要宽格式数据(行对应Y值、列对应X值,单元格存Z值),这是多数报错的根源,下面给你两种解决方案:
方案一:规整坐标点(无缺失/重复)
如果你的X、Y是规整的网格(每个(X,Y)对唯一且无缺失),直接用pandas重塑数据后绘制:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 假设你的数据存于df中 # 将长格式转为宽格式 df_pivot = df.pivot(index='Y', columns='X', values='Z') # 绘制热力图 plt.figure(figsize=(8,6)) sns.heatmap(df_pivot, annot=True, cmap='viridis', fmt='g') plt.xlabel('X') plt.ylabel('Y') plt.title('Heatmap of Z Values') plt.show()
- 若存在重复的(X,Y)对,在pivot时添加聚合函数去重,比如取均值:
df_pivot = df.pivot(index='Y', columns='X', values='Z', aggfunc='mean')
方案二:非规整/缺失坐标点(插值填充)
如果你的X、Y不是规整网格,或存在缺失点,用插值方法生成连续热力图:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import griddata # 创建高密度网格 xi = np.linspace(df['X'].min(), df['X'].max(), 100) yi = np.linspace(df['Y'].min(), df['Y'].max(), 100) xi, yi = np.meshgrid(xi, yi) # 用三次插值填充缺失点 zi = griddata((df['X'], df['Y']), df['Z'], (xi, yi), method='cubic') # 绘制填充后的热力图 plt.figure(figsize=(8,6)) plt.contourf(xi, yi, zi, cmap='viridis', levels=20) plt.colorbar(label='Z Value') plt.xlabel('X') plt.ylabel('Y') plt.title('Interpolated Heatmap') plt.show()
内容的提问来源于stack exchange,提问作者physicist1911
相关产品推荐
相关产品推荐

