R:使用saveVideo()和rasterImage(太慢)使用png背景创建动画xy图

时间:2016-11-16 02:20:32

标签: r animation plot

我有一个数据框,其中包含行走在tx已知地图上的人的时间yx:0-520y:0-300坐标。我想创建一个在每个t行走的人的动画,其背景是地图。

我尝试使用动画包中的saveVideo(),没有背景,而且效果很好。当我尝试使用rasterImage()添加背景时,在背景中绘制PNG需要花费太多时间,因为它会在每个循环中从头开始绘制PNG。

有没有办法可以通过在每个循环上运行rasterImage()来加快这个过程?

是否可以删除绘图点,并绘制新点,以便我不必再次运行rasterImage()

非常感谢您的帮助!

以下是我的代码: a是包含xyt作为列

的数据框
saveVideo({ 
ani.options(interval = 1/100, nmax = 50)
xy = a[,1:2]
t = a$t
ima <- readPNG("floorplan.png")
for (i in 600:800) {
    plot(xy[i,], xlim = c(0,520),ylim = c(0,300))

    ####to plot my png as background. works fine if this section is omitted
    lim <- par()
    rasterImage(ima, lim\$usr[1], lim\$usr[3], lim\$usr[2], lim\$usr[4])
    #####


    legend('topright',legend=paste('time =',i), bty='n')
    ani.pause()
    }
},movie.name = "pathBG.mp4")

1 个答案:

答案 0 :(得分:0)

由于R主要是统计工具而不是裸机编程语言,因此它不具备开箱即用的高性能图形的大量支持。

要提高生成动画的效果,最好的办法是使用RGL包。这允许您使用机器的图形硬件来显示图形。您可以设置一次RGL场景,然后重复使用它来制作动画所需的所有快照,这样就不会有很长的加载时间!

以下是要采取的步骤:

  1. 安装RGL软件包
  2. 使用PNG作为背景设置场景,或将其作为盒子对象上的素材。定位你的行走者。
  3. 拍摄场景的快照并保存png
  4. 移动行走的人位置
  5. 从第3步开始重复
  6. 有关代码示例,请参阅Guillaume Fillion的优秀帖子,here