2015-05-04 113 views
1

我創建了animate函數的動畫,其中包含raster包,並且希望在其上添加世界矢量地圖。在R中添加矢量世界地圖到光柵動畫

這是我的代碼,我動畫之前創建一個從月平均溫度的三維陣列光柵磚:

r <- brick(ncols=nb.cols, nrows=nb.rows) 
r <- setValues(r, monthly.mean) 
animate(r) 

光柵動畫作品不錯,但我怎麼能加入世界矢量地圖?

非常感謝

回答

1

可以使用addfun參數

library(raster) 
# example data 
r <- raster(nrows=10, ncols=10) 
s <- stack(replicate(10, setValues(r, runif(ncell(r))))) 
xy <- cbind(-180 + runif(10) * 360, -90 + runif(10) * 180) 

# create a function to add some vector data 
fun <- function() { 
    points(xy, cex=2) 
    points(xy, pch=3, col='red') 
} 

# use it 
animate(s, addfun=fun) 
1

我懷疑你可以,但你可以使用animation包來創建播放/停止/循環控制等網頁動畫

你將不得不編寫一個函數來繪製您的動畫的每一幀都帶有柵格圖層和矢量地圖,然後您將其粘貼在animation包的saveHTML函數中。

例(未測試):

saveHTML({ for(f in 1:12){plot(r[[i]]; plot(world, add=TRUE)} }) 

應該創建一個HTML文件,然後打開瀏覽器來查看它。爲了使這個例子工作,你需要在同一座標系中有一個world矢量對象。繪製柵格時,您可能還需要設置zlim,以便縮放不會更改。

+0

我想這一切。謝謝! – Marc

0

謝謝!這兩種方法都很有魅力!

一個快速的回答對於那些有興趣:

隨着saveHTML:

require(animation) 
require(rgdal) 
require(raster) 

countries <- readOGR(dsn=".", layer="Countries") # Shapefile of world countries 

r <- brick(ncols=144, nrows=72) 
r <- setValues(r, monthly.mean)   # monthly.mean is a 3D array 144x72x420 

saveHTML({ 
    for(m in 1:420) {      # serie of 420 months 
    plot(r[[m]], zlim=c(min, max))  # min, max of the legend 
    plot(countries, add=T) 
    } 
}) 

樂趣:

require(rgdal) 
require(raster) 

countries <- readOGR(dsn=".", layer="Countries") 

r <- brick(ncols=144, nrows=72) 
r <- setValues(r, monthly.mean) 

fun <- function() { 
    plot(countries, add=T) 
} 

animate(r, zlim=c(min, max), addfun=fun)