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

如何在RStudio中实现眼动数据热力图与背景图精准叠加?

解决方法

核心是让背景图的坐标范围完全匹配热力图的X/Y轴范围,同时保留图片原始宽高比,避免拉伸变形。

1. 提取热力图的坐标边界

从kde2d生成的结果中获取X、Y轴的极值,这是热力图的坐标系范围:

x_range <- range(dens11$x)
y_range <- range(dens11$y)

2. 计算背景图的适配范围

根据背景图的宽高比,计算出适配热力图坐标范围的显示边界,确保图片比例不变:

im <- readPNG("F:/analysisdata/heatmap/original_resize/Nubmer_1.png")
img_w <- ncol(im)
img_h <- nrow(im)
img_aspect <- img_h / img_w

# 适配热力图X范围,计算对应的Y范围(保持图片比例)
target_y <- c(y_range[1], y_range[1] + (x_range[2] - x_range[1]) * img_aspect)

# 若需适配Y范围调整X范围,用下面的代码:
# target_x <- c(x_range[1], x_range[1] + (y_range[2] - y_range[1]) / img_aspect)

3. 统一坐标系绘制叠加图

先绘制背景图,再叠加热力图,确保两者坐标完全对齐:

# 绘制空图,设置坐标范围为适配后的边界
plot(x_range, target_y, type = "n", xlab = "", ylab = "", asp = img_aspect)
# 绘制背景图,坐标与空图完全匹配
rasterImage(im, x_range[1], target_y[1], x_range[2], target_y[2])
# 开启新图层
par(new = TRUE)
# 绘制热力图,指定坐标范围与背景图一致,关闭坐标轴避免重复
image(dens11, col=heat.colors(n, rev=TRUE), xlim = x_range, ylim = target_y, axes = FALSE, xlab = "", ylab = "")

额外注意事项

  • 如果眼动数据的X/Y坐标本来就是基于背景图的像素位置采集的,直接用x_range <- c(0, img_w)、y_range <- c(0, img_h)即可,无需计算比例。
  • 屏幕坐标系中Y轴通常从上到下递增,但image()函数默认Y轴从下到上递增,若出现上下颠倒,用ylim = rev(target_y)反转Y轴即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:38