3

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 のレンダリングが遅い理由がわかりません。このレートでは、2 分間のビデオを 25 fps でレンダリングするのに 45 分ほどかかります。この比較的単純なマップの例では遅いようです。でラッピングしapplyても速くはありません。より効率的にラップする方法plot、または変更されていない要素がレンダリングされた後に途中でプロットを保存する方法を知っている人はいますか?

4

1 に答える 1

6

SpatialPolygonsDataFrame のプロット メソッドよりも、十分な解像度の画像としてマップをプロットする方が効率的です。

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)

ここに画像の説明を入力

于 2013-07-16T14:05:12.233 に答える