代码之家  ›  专栏  ›  技术社区  ›  89_Simple

使用spplot在单页中绘制多个形状文件

  •  -1
  • 89_Simple  · 技术社区  · 6 年前

    这就是我绘制多重光栅的方法。

    library(raster)
    x <- raster::getData('worldclim', var='tmin', res = 10)
    var.list <- c("tmin1","tmin2","tmin3","tmin4")
    
    ras.stack <- stack()
    
    for(i in var.list){
    
      stack.list <- stack(stack.list, x[[paste0(i)]])
    }
    
    spplot(stack.list)
    

    我想对具有公共属性的4个形状文件执行相同的操作 称为“平均值”

    fra <- raster::getData('GADM',country = 'FRA', level = 2)
    shp.stack <- stack()
    
    for(i in 1:4){
      mean.value <- data.frame(NAME_2  = fra@data$NAME_2, sample(1:200, 96))
    
      my.shp <- merge(fra, mean.value, by = 'NAME_2') 
      shp.stack <- stack(shp.stack, my.shp)
    }
    

    sapply(x,fromdisk)中出错&sapply(x,inmemory):操作 只能用于数字、逻辑或复杂类型

    我怎么修?

    1 回复  |  直到 5 年前
        1
  •  0
  •   SeGa    5 年前

    你必须改变 SpatialPolygonsDataFrame 到A 光栅 对象优先,以便能够堆叠它。您还可以转换为空间网格*,空间像素*-对象,基于 raster::stack .

    所以你的第二个代码会变成这样:

    library(raster)
    fra <- raster::getData('GADM',country = 'FRA', level = 2)
    shp.stack <- stack()
    for(i in 1:4){
      mean.value <- data.frame(NAME_2  = fra@data$NAME_2, sample(1:200, 96))
      my.shp <- raster::merge(fra, mean.value, by = 'NAME_2')
    
      r <- raster(ncol=180, nrow=180)
      extent(r) <- extent(my.shp)
      rp <- rasterize(x = my.shp, y = r)
    
      shp.stack <- raster::stack(shp.stack, rp)
    }
    
    plot(shp.stack)
    

    enter image description here