RSAVE键图像来创建情节的动画与大量的点逐渐产生(R save images to create

2019-09-20 01:05发布

我试图创建一个基于增量是随时间建立的散点图动画。 用例是,我有大约2万点与时间戳每一个数据库,并希望生成帧,显示所有的点或特定日期之前。

若不保存图像,我可以先调用做这个plot()然后有一个for循环,使用增量绘制数据对于每个连续的日points()函数。

当我尝试使用下面的代码保存图像,我得到一个错误“plot.new尚未被称为”。 据我所知, dev.off()需要保存图像,但也关闭正被吸引到该设备。 有没有办法来解决这个问题? 不必重新情节,每帧的数据并不多一种选择,由于数据的大小。

plot(info$lon, info$lat, xlim=c(0,30), ylim=c(30,60))
for (i in c(1:length(allDates))){
    filename=paste(sprintf('%05d', i), ".png", sep="")  
    png(filename=fileName)
    # (code that gets the data for a particular date via a database query)
    points(info$lon, info$lat, cex=0.1)
    dev.off()
}

更新:通过@罗马lustrik约注释ggsave()是我一直在寻找,并在下面的代码的结果:

plotObj = ggplot(...) + geom_point() + xlim(...) + ylim(...)
for (i in c(1:length(allDates))){
    filename=paste(sprintf('%05d', i), ".png", sep="")  
    # (code that gets the data for a particular date via a database query)
    plotObj = plotObj + geom_point(data=info, aes(x=lon, y=lat), size=0.5)
    print(plotObj)
    ggsave(filename=filename, width=6, height=6)
}

然而,这仍然是一个有点慢,所以我目前的解决方案,以快速地呈现图像是使用类似于原始代码,但在那里我只是用plot()来渲染为一个日期数据帧(使用透明背景) 。 要逐步叠加起来的图片,然后我用它使用ImageMagick的bash脚本convert -composite命令混合两个图像组合在一起。 这个混合后的图像,然后与图像混合从下一个日期,等等,直到最后的图像显示的所有数据:

#!/bin/bash
for i in $files
do
    convert $prevFile $i -composite ./stackedImages/$i
    prevFile=./stackedImages/$i
done

Answer 1:

如果我也明白了,你要得到它与不同数量的点几个PNG文件,并与创建的第一个点plot(info$lon, info$lat, xlim=c(0,30), ylim=c(30,60))

你可以这样做,而不是:

temp1 <- info$lon
temp2 <- info$lat
for (i in c(1:length(allDates))){
        filename=paste(sprintf('%05d', i), ".png", sep="")  
        png(filename=fileName)
        plot(temp1, temp2, xlim=c(0,30), ylim=c(30,60))
        # (code that gets the data for a particular date via a database query)
        points(info$lon, info$lat, cex=0.1)
        dev.off()
        temp1 <- c(temp1,info$lon)
        temp2 <- c(temp2,info$lat)
}


文章来源: R save images to create animation of plot incrementally generated with large number of points