You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:30:42