3

我从屏幕上的鼠标移动记录了 X 和 Y 坐标。我也有记录位置的时间。我想绘制这些显示鼠标如何随时间移动的图。

这是我的数据框的一个片段:

      X   Y          Time
1   812 257 1339892810683
2   793 275 1339892810709
3   783 284 1339892810732
4   746 308 1339892810771

我认为准确表示这一点的唯一两种方法是 3D 绘图,或本质上表示播放的动画。有人知道如何在 R 中做到这一点吗?或者,关于如何将其可视化的任何其他想法?

4

5 回答 5

5

对于 3D 绘图,我推荐rgl库。

install.packages("rgl") # if you don't have it
library(rgl)
plot3d(yourData$X,yourData$Y,yourData$Time)

这会给你一个散点图,但我认为你也应该能够让它画线来表示时间。一个很酷的功能是您可以通过拖动鼠标来更改视角。

于 2012-10-01T18:19:23.840 回答
4

如果你想做一个动画,那么有动画包,或者使用tkexampTeachingDemos 包中的函数创建的 GUI 的动画控制。color.scale.lines您可以通过使用plotrix 包中的颜色渐变绘制最后几个点来增强动画效果。

这是一个例子:

library(TeachingDemos)
library(plotrix)

tmpfun <- function(start,numpoints=10) {
    plot(ccc$Lon,ccc$Lat, xlab='Longitute', ylab='Lattitude', type='n')
    to <- min(nrow(ccc), start+numpoints)
    color.scale.lines( ccc$Lon[start:to], ccc$Lat[start:to], 
        c(0.7,0), c(0.7,0), c(0.7,0), colvar=seq_len(numpoints) )
}

tmplist <- list( numpoints=list('spinbox', init=10, from=1, to=nrow(ccc)),
                 start=list('animate',init=1, from=1, to=nrow(ccc)) )

tkexamp( tmpfun, tmplist )

这是考虑时间的第二个示例:

tmpfun2 <- function(start, dur=120) {
    time <- as.numeric(h2h$Time3)
    fr <- which( time >= start )[1]
    if( is.na(fr) ) fr <- nrow(h2h)-1
    to <- which( time >= start+dur )[1]
    if( is.na(to) ) to <- nrow(h2h)
    plot(h2h$Lon, h2h$Lat, xlab='Longitute', ylab='Lattitude',
     type='n', main=paste('Times',time[fr],'to',time[to]) )
    color.scale.lines( h2h$Lon[fr:to], h2h$Lat[fr:to], 
        c(0.7,0), c(0.7,0), c(0.7,0), colvar=time[fr:to])
}

tmplist2 <- list( dur=list('spinbox', init=120, from=10, to=1200),
                start=list('animate',init=0, from=0, to=1780, delay=100,
                            resolution=10) )

tkexamp( tmpfun2, tmplist2 )

在任一示例中使用颜色可能会产生更有意义的颜色渐变。

于 2012-10-01T19:43:34.217 回答
3

根据 Ben Bolker 的建议,我还查看了 googleVis。这可能是最少的工作。我必须添加一个“实体”列以满足动态图表 API 的要求。

df$Entity = rep("Mouse", nrow(df))
library(googleVis)
M <- gvisMotionChart(df, "Entity", "Time",
                 options=list(width=400, height=360))
plot(M)

代码运行良好,甚至将 Time 列保留为整数——它不必对应于实际的时间对象。唯一的缺点是代码在浏览器中运行,(显然)没有简单的方法来保存它。

于 2012-10-01T22:57:01.570 回答
3

您可以从每个时间实例制作一个绘图,将绘图保存到 gif 文件,并使用gifsicle之类的应用程序从所有实例/绘图创建动画。

于 2012-10-01T18:15:41.690 回答
0

@Jim,我为插件道歉,但如果您仍在寻找答案,我开发的应用程序正是为此目的而设计的。它被称为popcharts,它只是Mac。它不是一个免费的应用程序,但请查看该网站,那里有很多可用的演示教程。但基本上,如果您的文件结构与您的问题一样,那么您应该花费不超过几分钟的时间来查看您的数据动画,甚至将其导出为视频。所以我可能不知道如何在 R 中做到这一点,但这会很快完成工作。

于 2014-07-03T15:00:59.500 回答