我有Tobii Eyetracker的数据集。 在cetain操作之后,数据集看起来像这样
timestamp xposition yposition
我使用python来收集数据。当参与者看着监视器时,数据被重新记录。我想为显示器的大小生成热图。
稍后我还想制作一张图片并叠加这张热图。
我想用R来生成热图。 执行此操作的算法是什么,或者是否有插件直接将我的数据集作为输入提供?
实验设置:
我运行的代码有错误: 在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,因此我在进行实验时与生成的点相匹配。仅在此区域绘制的图像。
答案 0 :(得分:2)
首先让我们生成一些数据
# 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.x
和breaks.y
中定义的特定时间间隔。在这种情况下,我使用了20x20网格,但显然你可以随意改变它
然后我们使用table
生成一个列联表,它将是我们的位置矩阵&#34;。
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
将忽略没有数据点的间隔。转换为因子有效地迫使表输出值,即使在那些没有值的插槽中也是如此。