如何基于含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
相关产品推荐
相关产品推荐

