【问题标题】:A function in R for plotting locations with consistent high values in multiple raster dataR中的一个函数,用于在多个栅格数据中绘制具有一致高值的位置
【发布时间】:2021-08-19 15:52:18
【问题描述】:

我有四个相同范围的光栅文件。每个栅格数据的低值和高值模式不同。我想在范围(边界)中绘制值大于 x(其中 x 是整数)的区域。任何人都可以帮助我使用 r 函数来执行此操作吗?请在下面找到栅格数据的示例代码。在此示例中,假设我想绘制和识别所有四个栅格中值大于 0.4 的像元。我想要一张显示值大于 4 的单元格的图像,而不是四个单独的图像。更像是覆盖栅格并识别所有图像中值大于 4 的单元格

   library(raster)

r1 <- raster(nrows = 1, ncols = 1, res = 0.5, xmn = -1.5, xmx = 1.5, ymn = -1.5, ymx = 1.5, vals = 0.3)

rr <- lapply(1:4, function(i) setValues(r1,runif(ncell(r1))))

par(mfrow = c(2,2))
plot(rr[[1]])
plot(rr[[2]])
plot(rr[[3]])
plot(rr[[4]])

谢谢/

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个超级简单的解决方案,可以轻松推广到不同长度的输入:

    myplot <- function(input,threshold){
      input <- lapply(input,function(x){
        x <- x>threshold
      })
      
      par(mfrow = c(2,2))
      plot(input[[1]])
      plot(input[[2]])
      plot(input[[3]])
      plot(input[[4]])
    }
    
    myplot(rr,0.4)
    

    【讨论】:

    • 我想要一张显示值大于 4 的单元格的图像,而不是四个单独的图像。更像是覆盖栅格并识别所有图像中值大于 4 的单元格。
    • 在匿名函数中分配给x 是没有意义的。其实整个lapply可以简写成lapply(input, `&gt;`, threshold)
    【解决方案2】:

    您可以将raster 图像与&amp; 组合在一起。每个单独地块的第一个阈值:

    r2 = lapply(rr, `>`, threshold)
    

    然后将它们组合起来,只保留所有大于阈值的字段:

    summary = Reduce(`&`, r2)
    plot(summary)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多