我试图创建一个基于增量是随时间建立的散点图动画。 用例是,我有大约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