代码之家  ›  专栏  ›  技术社区  ›  bbiasi

如何在R中为SpatialPixelsDataFrame类对象生成多点?

  •  1
  • bbiasi  · 技术社区  · 6 年前

    我有一个类似于 one provided in a StackOverflow response 使用这个来自Ege Rubak的答案,但是我在做一年的分析,所以我有一个特定年份每个月的图像。

    enter image description here

    library(gstat)
    library(sp)
    
    lat <-  c(-23.49174, -23.49179, -23.49182, -23.49183, -23.49185, -23.49187)
    long <- c(152.0718, 152.0718, 152.0717, 152.0717, 152.0717, 152.0717)
    pH <- c(8.222411, 8.19931, 8.140428, 8.100752, 8.068141, 8.048852)
    sample <- data.frame(lat, long, pH)
    
    x.range <- range(sample$long)
    y.range <- range(sample$lat)
    
    x<-seq(x.range[1], x.range[2], length.out=20)
    y<-seq(y.range[1], y.range[2], length.out=20)
    grd<-expand.grid(x,y)
    
    coordinates(sample) = ~long+lat
    coordinates(grd) <- ~ Var1+Var2
    gridded(grd) <- TRUE
    
    proj4string(sample) <- CRS("+proj=longlat +datum=WGS84")
    proj4string(grd) <- CRS("+proj=longlat +datum=WGS84")
    
    dat.idw <- idw(formula=pH ~ 1, locations = sample, newdata = grd, idp = 2.0)
    #> [inverse distance weighted interpolation]
    
    plot(dat.idw, axes = T)
    

    如下图所示,如何将12个图像合并为一个绘图,并执行类似于ggplot facet wrap的操作?

    enter image description here

    测试中建议的代码 this answer :

    library(gridExtra)
    library(raster)
    s <- stack(raster(dat.idw))
    s2 <- stack(raster(dat.idw))
    
    p1 <- levelplot(s)
    p2 <- levelplot(s2)
    grid.arrange(p1, p2, ncol=2)
    
    # Error in UseMethod("levelplot") : 
    #  no applicable method for 'levelplot' applied to an object of class 
    # "c('RasterStack', 'Raster', 'RasterStackBrick', 'BasicRaster')"
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   www    6 年前

    你可以使用 levelplot 功能来自 rasterVis 通过准备光栅堆栈对象并将其提供给函数来打包。

    library(raster)
    library(rasterVis)
    
    r1 <- raster(dat.idw)
    r2 <- raster(dat.idw)
    
    # I am only using two rasters as an example
    # You can stack 12 rasters for your raster stack 
    s <- stack(list(r1, r2))
    
    rasterVis::levelplot(s)
    

    enter image description here

    或者使用 spplot sp 包裹。

    sp::spplot(s)
    

    enter image description here

    或者 tmap 包裹。

    图书馆(tmap)

    tm_shape(s) +
      tm_raster()
    

    enter image description here