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

如何基于含x、y坐标与数值列的DataFrame绘制x-y平面热力图?

解决方法

你用的kdeplot是用来计算并绘制二维核密度估计的,它展示的是点的分布密度,不是你需要的用第三列数值作为热力值的效果。试试下面几种适配你需求的方案:

1. 用Seaborn Heatmap(适合离散网格/分箱数据)

如果你的x、y是离散值,或者可以先分箱处理,先把数据转成透视表,再用热力图展示:

import seaborn as sns
import matplotlib.pyplot as plt

# 将数据转为x为列、y为行的透视表,值为性能比
pivot_df = inv_positions.pivot(index='y', columns='x', values='性能比')

# 绘制热力图,annot=True可显示单元格数值
sns.heatmap(pivot_df, cmap='viridis', annot=True, fmt='.2f')
plt.xlabel('X位置')
plt.ylabel('Y位置')
plt.title('性能比热力图')
plt.show()

如果x、y是连续值,先对它们分箱处理:

import pandas as pd

# 对x、y各分10组,生成分箱标签
inv_positions['x_bin'] = pd.cut(inv_positions['x'], bins=10, labels=False)
inv_positions['y_bin'] = pd.cut(inv_positions['y'], bins=10, labels=False)

# 按分箱后的列分组,计算每个箱内的平均性能比
pivot_df = inv_positions.groupby(['y_bin', 'x_bin'])['性能比'].mean().unstack()

sns.heatmap(pivot_df, cmap='viridis')
plt.show()

2. 带颜色映射的散点图(适合离散点展示)

直接用每个点的颜色对应性能比,直观展示单个样本的性能分布:

sns.scatterplot(
    data=inv_positions,
    x='x',
    y='y',
    hue='性能比',
    palette='viridis',
    size='性能比',  # 可选:用点的大小强化数值区分
    sizes=(50, 200)
)
plt.colorbar(label='性能比')
plt.xlabel('X位置')
plt.ylabel('Y位置')
plt.show()

3. Hexbin图(适合大数据量)

把x-y平面分成六边形单元格,计算每个单元格内性能比的均值,适合数据点很多的场景:

import numpy as np

plt.hexbin(
    inv_positions['x'],
    inv_positions['y'],
    C=inv_positions['性能比'],
    cmap='viridis',
    gridsize=20,  # 控制单元格数量
    reduce_C_function=np.mean  # 每个单元格用均值统计性能比
)
plt.colorbar(label='平均性能比')
plt.xlabel('X位置')
plt.ylabel('Y位置')
plt.show()

4. 填充等高线图(适合连续平滑热力面)

如果需要生成平滑的热力面,先通过插值把离散点转换成连续网格,再画填充等高线:

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt

# 生成均匀分布的网格
xi = np.linspace(inv_positions['x'].min(), inv_positions['x'].max(), 100)
yi = np.linspace(inv_positions['y'].min(), inv_positions['y'].max(), 100)
xi, yi = np.meshgrid(xi, yi)

# 用三次插值生成网格上的性能比数值
zi = griddata(
    (inv_positions['x'], inv_positions['y']),
    inv_positions['性能比'],
    (xi, yi),
    method='cubic'
)

# 绘制填充等高线
plt.contourf(xi, yi, zi, cmap='viridis', levels=20)
plt.colorbar(label='性能比')
plt.xlabel('X位置')
plt.ylabel('Y位置')
plt.show()

内容的提问来源于stack exchange,提问作者Yaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 03:54:15