在R中创建动画
我正在研究在R中创建动画的可能性。{animation}包似乎主要是ffmpeg和imagemagick的R平台。我发现创建单个图像帧的唯一参考是在循环中嵌套在R中创建动画,r,animation,R,Animation,我正在研究在R中创建动画的可能性。{animation}包似乎主要是ffmpeg和imagemagick的R平台。我发现创建单个图像帧的唯一参考是在循环中嵌套plot()。但是,考虑到png()渲染器的速度性能较差,尤其是对于包含贴图对象的打印,生成更复杂的打印的过程似乎非常缓慢,例如: library(maptools) data(wrld_simpl) starttime = Sys.time() for(i in 1:10){ png(paste('frames/', i, '
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
进行包装不会更快。有没有人知道一种更有效地包装绘图的方法,或者在渲染不变元素后中途保存绘图的方法?将地图打印为具有足够分辨率的图像应该比空间多边形框架的绘图方法更有效
require(maps) # save the world
png("world.png", width=500, height=200)
map("world", col="grey90", fill=TRUE, border="grey90", mar=c(0,0,0,0))
dev.off()
library(png); library(grid)
img = readPNG("world.png")
animation::saveGIF( {
for( ii in 1:100) {
grid.newpage()
grid.raster(img)
grid.points(default.units="npc")
}
}, ani.height=200, ani.width=500)
虽然我刚刚发现了,所以我的问题可能是重复的。plot(wrld\u siml)
实际上绘制了很多段。。。您可能希望以某种方式将其转换为光栅层;光栅图像应该更高效,分辨率更高。这很公平。我只是认识到在重新加载时仍然有很多重复。其他地方的评论建议,ggplot2::ggsave
是实现这一点的一种方法,我将对此进行研究。ggplot2
将比基本图形慢得多,我认为ggsave只是png()的包装器;dev.off()
所以它也会变慢。你可以使用栅格光栅
和栅格图像一样快,希望@baptiste结合动画和栅格光栅
取消删除他的答案。如果你认为你可以摆脱基本图形,这是很有用的。我不太确定。但我想知道animation
是否可以利用其imageMagick将“数据”图像覆盖在底图上,这样会更有效?看起来很有前途。基本图形也一样,我只是更喜欢网格。但是是的,如果你不需要斧头等,imagemagick会更好。(动画现在在我的浏览器中工作,真奇怪…)