【问题标题】:In R, how can I plot x,y values over time (3D or animation)?在 R 中,如何随时间(3D 或动画)绘制 x、y 值?
【发布时间】:2012-10-01 18:08:18
【问题描述】:

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

这是我的数据框的外观:

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

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

【问题讨论】:

  • 也许可以看看googleVis 包...
  • @BenBolker - 谢谢 - 我发布了一个使用 googleVis 工作的代码示例的答案。该 API 非常易于使用。

标签: r plot


【解决方案1】:

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

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

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

【讨论】:

  • 它有效。我必须从我的每个时间值中减去 1339892810000 才能使其工作,但结果是可用的。谢谢。
【解决方案2】:

如果您想制作动画,则可以使用动画包,或使用 TeachingDemos 包中的tkexamp 函数创建的 GUI 动画控制。您可以使用 plotrix 包中的 color.scale.lines 绘制带有颜色渐变的最后几个点来增强动画效果。

这是一个例子:

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 )

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

【讨论】:

  • 该解决方案很好地为 X 和 Y 设置动画。但是,它忽略了时间方面。有没有办法在播放中加入时间?
  • 包含时间的一个简单选项是将color.scale.lines 中的colvar 参数更改为您的时间变量。您还可以更改 tmpfun 函数,使其在开始时间和时间间隔而不是点索引上进行子集化。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    根据 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 列保留为整数——它不必对应于实际的时间对象。唯一的缺点是代码在浏览器中运行,(显然)没有简单的方法来保存它。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2011-04-28
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多