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

基于加权散点生成具有邻域影响的热力图/密度图技术问询

问题描述

我有如下数据,每个点包含x、y坐标和数值z,z通过散点颜色体现:

xy = np.random.random((50,3))
x = xy[:,0]
y = xy[:,1]
z = xy[:,2]*100

plt.scatter(x,y,c=z, cmap="Reds")

原始散点图

我需要生成热力图/密度图,让每个数据点的数值z能够影响其周边区域。尝试用histogram2d()实现时,无法达到点数值影响邻近区域的效果,当前代码及输出如下:

heatmap, xedges, yedges = np.histogram2d(x, y, weights=z, bins=(50,50))
extent = [0, 1, 0, 1]

histogram2d生成的热力图

解决方案

要实现带数值权重的邻域影响热力图,推荐使用带权重的核密度估计(KDE),它能让每个点的z值作为权重,对周边区域产生对应强度的贡献。

方法一:带权重的高斯KDE(精准方案)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

# 生成原始数据
xy = np.random.random((50,3))
x = xy[:,0]
y = xy[:,1]
z = xy[:,2]*100

# 构建带权重的KDE模型
coords = np.vstack([x, y])
kde = gaussian_kde(coords, weights=z)

# 生成绘图用的网格点
xgrid, ygrid = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))
grid_coords = np.vstack([xgrid.ravel(), ygrid.ravel()])

# 计算网格点的加权密度值
density = kde(grid_coords).reshape(xgrid.shape)

# 绘制热力图
plt.imshow(density, extent=[0,1,0,1], origin='lower', cmap='Reds')
plt.scatter(x, y, c='black', s=15)  # 叠加原始散点便于对照
plt.colorbar(label='加权密度值')
plt.show()
  • 核心是gaussian_kde的weights参数,直接将z值作为每个点的权重,让高z值点对周边区域的贡献更大
  • 可通过bw_method参数调整带宽(比如bw_method=0.1缩小影响范围,bw_method=0.3扩大影响范围),控制邻域影响的平滑程度

方法二:高斯平滑histogram2d结果(快速方案)

如果不需要精准的权重建模,也可以对histogram2d的结果做高斯平滑,近似实现邻域影响效果:

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter

# 生成原始数据
xy = np.random.random((50,3))
x = xy[:,0]
y = xy[:,1]
z = xy[:,2]*100

# 生成带权重的直方图
heatmap, xedges, yedges = np.histogram2d(x, y, weights=z, bins=(50,50))
# 高斯平滑处理
smoothed_heatmap = gaussian_filter(heatmap, sigma=2)

# 绘制平滑后的热力图
plt.imshow(smoothed_heatmap, extent=[0,1,0,1], origin='lower', cmap='Reds')
plt.colorbar(label='平滑后权重值')
plt.show()
  • sigma参数控制平滑程度,值越大邻域影响范围越广
  • 该方法实现简单,但权重的传播逻辑不如KDE精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:50:40