【发布时间】:2013-07-16 22:05:12
【问题描述】:
我正在研究在 R 中创建动画的可能性。{Animation} 包似乎主要是用于 ffmpeg 和 imagemagick 的 R 平台。我发现创建单个图像帧的唯一参考是将plot() 嵌套在循环中。但是,鉴于png() 渲染器的速度性能不佳,尤其是对于包含地图对象的绘图,这似乎是一个难以实现的缓慢过程,用于生成更复杂的绘图 - 例如:
library(maptools)
data(wrld_simpl)
starttime = Sys.time()
for(i in 1:10){
png(paste('frames/', i, '.png', sep=''))
plot(wrld_simpl, col='grey85', bg = 'white', border='white')
points(sample(-180:180, 50), sample(-90:90, 50), col='red', pch=16, cex=2)
title('poxy map')
dev.off()
}
print(Sys.time() - starttime)
产生 10 帧并且:
Time difference of 9.763794 secs
我不明白为什么 R 的渲染速度如此之慢 - 在这个速度下,以 25fps 的速度渲染一个 2 分钟的视频需要 45 分钟左右,这对于这个相对简单的地图示例来说似乎很慢。用apply 包裹也不会更快。有谁知道更有效地包装plot 的方法,或者在渲染不变的元素后中途保存绘图?
【问题讨论】:
-
虽然我刚刚发现this 所以我的问题可能是重复的。
-
plot(wrld_simpl)实际上正在绘制很多段...您可能希望以某种方式将其转换为栅格图层; rasterImage 在分辨率不错的情况下应该效率更高。 -
很公平。我只是认识到重新加载它仍然有很多重复。其他地方的评论表明
ggplot2::ggsave是实现这一目标的一种方法,我将对此进行研究。 -
ggplot2会比基本图形慢得多,我估计,而且 ggsave 只是png(); dev.off()的包装,所以它也会更慢。 -
您可以使用
grid.raster和rasterImage一样快,希望@baptiste 结合animation和grid.raster取消删除他的答案。