【问题标题】:Generating heat maps for eye tracking data [closed]为眼动追踪数据生成热图 [关闭]
【发布时间】:2014-11-01 17:26:56
【问题描述】:

我有一个来自 Tobii Eyetracker 的数据集。 某些操作后的数据集如下所示

timestamp      xposition      yposition

我使用 python 来收集数据。当参与者看着监视器时,数据被重新记录。我想为显示器的大小生成热图。

稍后我还想制作一个图像并覆盖此热图。

我想使用 R 来生成热图。 执行此操作的算法是什么,或者是否有插件可以直接将我的数据集作为输入提供?

实验设置:

  1. 时间是相对时间:100,100.02,100.04,100.06..等等 以 0.02 秒的顺序递增
  2. xPosition 和 yPosition 以厘米为单位。从显示器的中心。
  3. 背景图片将被分割成 10 行 6 列的方形盒子,每个盒子的大小为 3.4 厘米
  4. 使用的显示器分辨率大小为 1920x1080 精确 MonitorUsed

我运行时出错的代码: 在 matlab 中使用 dlmwrite 导出后,我使用 R Studio 中的 GUI 加载变量并执行以下操作:

> xPos = myfile[1:278,1]
> yPos = myfile[1:278,2]
> breaks.x <- seq(-23.5, 23.5, length.out = 3.4)
> breaks.y <- seq(-14.1, 14.1, length.out = 3.4)
> int.x <- findInterval(xPos, breaks.x)
> int.y <- findInterval(yPos, breaks.y)
> tb <- table(int.x, int.y)
> image(breaks.x, breaks.y, tb, las=1)
Error in image.default(breaks.x, breaks.y, tb, las = 1) : 
  dimensions of z are not length(x)(-1) times length(y)(-1)

我在 x 的 - 到 + 23.5 和 y 的 - 到 + 14.1 之间做了它,这样我就可以匹配我在做实验时生成的点。仅在该区域绘制的图像。

Dataset

【问题讨论】:

  • 在 matlab 和 r 中使用 table() 函数

标签: python r matlab heatmap


【解决方案1】:

首先让我们生成一些数据

# Set RNG seed for reproducibility 
set.seed(12345) 

times <- seq(as.POSIXct("2014-09-08 14:00:00"), 
             as.POSIXct("2014-09-08 16:00:00"), 5)
pos.x <- runif(length(times), 0, 1024)
pos.y <- runif(length(times), 0, 768)

现在我们可以使用findInterval 将每个 x,y 对映射到特定的区间,我们在 breaks.xbreaks.y 中定义。在这种情况下,我使用了 20x20 的网格,但显然您可以随意更改它。
然后我们使用table 生成一个列联表,这将是我们的“位置矩阵”。

breaks.x <- seq(0, 1024, length.out = 20)
breaks.y <- seq(0, 768, length.out = 20)
int.x <- findInterval(pos.x, breaks.x)
int.y <- findInterval(pos.y, breaks.y)

# See below for explanation
int.x <- factor(int.x, levels=1:20)
int.y <- factor(int.y, levels=1:20)

tb <- table(int.x, int.y)

最后,绘制热图

image(breaks.x, breaks.y, tb, las=1)

注意:两个factor 调用是必要的,因为table 将忽略不存在数据点的区间。转换为因子有效地强制表格输出值,即使在那些没有值的槽中也是如此。

【讨论】:

  • @arkv:好吧,因为我实际上并没有在热图上使用时间,所以我看不到那里的问题......除非你想要别的东西,否则请编辑你的问题更具体
  • 我现在看到没有使用时间。我在问题中编辑了其他一些内容
  • 我想知道以cm为单位的读数是否会影响覆盖背景图像?
  • 单位并不重要,您只需要根据需要缩放所有内容。
  • 在使用 dlmwrite 从 matlab 导出并使用 R 中的 GUI 加载之后。我做了以下操作 > xPos = myfile[1:278,1] > yPos = myfile[1:278,2] > 中断.x breaks.y int.x int.y tb image(breaks.x, breaks.y, tb, las=1) image.default 错误(breaks.x, breaks.y, tb, las = 1) : z 的维度不是长度(x)(-1) 乘以长度(y)(-1)
猜你喜欢
  • 2012-11-30
  • 2018-07-09
  • 2011-05-15
  • 2023-01-23
  • 1970-01-01
  • 2018-07-25
  • 2012-05-19
  • 2017-05-27
  • 2014-10-20
相关资源
最近更新 更多