2015-05-04 109 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)