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

Python生成鼠标热力图遇轴错位、无模糊效果,求优化方案

鼠标热力图解决方案(轴修复+模糊效果+大数据优化)

现有代码核心问题

  1. 轴错位:你构造的matrix维度是(x_max+1, y_max+1),但Seaborn热力图默认行对应y轴、列对应x轴,同时屏幕坐标的y轴是从上到下递增,和Matplotlib默认的y轴方向相反,导致显示错位。
  2. 错误赋值:matrix[df.x, df.y] = df.index是把索引值赋值给像素,而非统计坐标出现次数,数值逻辑完全错误。
  3. 无模糊效果:直接基于像素赋值的热力图是离散的,无法实现目标图的平滑Blob效果。

方案一:核密度估计(KDE)实现模糊Blob效果

这是最贴合目标图的方案,无需构造大矩阵,对大数据友好,直接通过2D KDE生成平滑热力图:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

# 读取数据
df = pd.read_csv(r'C:\Users\Jen\Desktop\mp.csv')
# 双显示器参数:两个1650x1050,所以x范围0-3300,y范围0-1050
SCREEN_X_MIN, SCREEN_X_MAX = 0, 1650 * 2
SCREEN_Y_MIN, SCREEN_Y_MAX = 0, 1050

plt.figure(figsize=(16, 10))  # 适配双显示器比例
# 生成2D KDE模糊热力图
sns.kdeplot(
    data=df,
    x='X', y='Y',
    cmap='jet',
    shade=True,
    bw_adjust=0.5,  # 调整模糊程度:数值越小越锐利,越大越模糊(建议0.3-1之间测试)
    clip=[(SCREEN_X_MIN, SCREEN_X_MAX), (SCREEN_Y_MIN, SCREEN_Y_MAX)]
)
# 反转y轴匹配屏幕坐标体系(屏幕左上角为y=0)
plt.ylim(SCREEN_Y_MAX, SCREEN_Y_MIN)
plt.xlim(SCREEN_X_MIN, SCREEN_X_MAX)
plt.xlabel('X 坐标')
plt.ylabel('Y 坐标')
plt.title('鼠标热力图(模糊效果)')
plt.show()

方案二:优化的精确像素热力图

如果需要统计每个像素的点击频次,用numpy.histogram2d替代手动构造矩阵,效率更高且解决轴错位:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

df = pd.read_csv(r'C:\Users\Jen\Desktop\mp.csv')
SCREEN_X_MIN, SCREEN_X_MAX = 0, 1650 * 2
SCREEN_Y_MIN, SCREEN_Y_MAX = 0, 1050

# 统计每个像素的点击次数
bins_x = np.arange(SCREEN_X_MIN, SCREEN_X_MAX + 1)
bins_y = np.arange(SCREEN_Y_MIN, SCREEN_Y_MAX + 1)
heatmap, _, _ = np.histogram2d(df['X'], df['Y'], bins=(bins_x, bins_y))

# 转置+反转y轴,匹配热力图的轴方向和屏幕坐标
heatmap = heatmap.T[::-1]

plt.figure(figsize=(16, 10))
sns.heatmap(
    heatmap,
    cmap='jet',
    xticklabels=500,  # 减少刻度密度,避免拥挤
    yticklabels=200,
    extent=[SCREEN_X_MIN, SCREEN_X_MAX, SCREEN_Y_MIN, SCREEN_Y_MAX]
)
plt.xlabel('X 坐标')
plt.ylabel('Y 坐标')
plt.title('鼠标热力图(精确像素统计)')
plt.show()

大数据优化建议

  1. KDE方案:Seaborn的kdeplot底层用了高效的核密度算法,13000行数据完全无压力,数据量更大时可通过sample参数降采样(如sample=10000)。
  2. 像素统计方案:numpy.histogram2d是C底层实现,比手动循环快100倍以上,若数据量超10万行,可合并像素块(比如每2x2像素合并为一个统计单元)减少计算量。
  3. 内存优化:避免构造和屏幕分辨率一样大的矩阵,用直方图或KDE替代直接赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:11:47