【问题标题】:R - create boxplot with rastersR - 用栅格创建箱线图
【发布时间】:2016-05-26 10:43:37
【问题描述】:

这可能相当简单,但我是 R 的新手。我已经尝试了一段时间,使用包栅格中的箱线图绘制两个栅格。

我有一个 DEM 栅格和一个包含 4 个集群组的分类栅格,我想按照手册中的说明将它们用作“区域”:

箱线图(x, y=NULL, maxpixels=100000, ...)

x 光栅* 对象

y 如果 x 是 RasterLayer 对象,则 y 可以是附加的 RasterLayer 以对 'zone' 的 x 值

> DEM
class       : RasterLayer 
dimensions  : 12381, 61922, 766656282  (nrow, ncol, ncell)
resolution  : 0.1, 0.1  (x, y)
extent      : 478307.4, 484499.6, 6131862, 6133100  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs 
data source : /Users/Yvonne/Desktop/Boxplot/Ribe_DEM_0.1m.tif 
names       : Ribe_DEM_0.1m 
values      : -7.523334, -0.36  (min, max)

> Cluster
class       : RasterLayer 
dimensions  : 12381, 61922, 766656282  (nrow, ncol, ncell)
resolution  : 0.1, 0.1  (x, y)
extent      : 478307.4, 484499.6, 6131862, 6133100  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs 
data source : /Users/Yvonne/Desktop/Boxplot/final_cluster.tif 
names       : final_cluster 
values      : 1, 4  (min, max)
attributes  :
 ID Rowid   COUNT
  1     0  463524
  2     1 4118997
  3     2 3390160
  4     3 3218998

> boxplot(DEM, Cluster, xlab="Cluster", ylab="Elevation")
Error in parse(text = x, keep.source = FALSE) : 
  <text>:2:0: unexpected end of input
1:  ~ 
   ^
In addition: Warning message:
In .local(x, ...) : taking a sample of 1e+05 cells

更新:
我刚刚找到了一个工作示例,它完全符合我的要求。但是,如果我用自己的数据运行它,我总是会遇到错误。也许有人可以解释错误信息。将不胜感激。

r1 <- r2 <- r3 <- raster(ncol=10, nrow=10)
r1[] <- rnorm(ncell(r1), 100, 40)
r2[] <- rnorm(ncell(r1), 80, 10)
r3[] <- rnorm(ncell(r1), 120, 30)
s <- stack(r1, r2, r3)
names(s) <- c('A', 'B', 'C')  

rc <- round(r1[[1]]/100)

hist(rc)
summary(rc)

boxplot(s[[1]],rc)

【问题讨论】:

    标签: r boxplot r-raster


    【解决方案1】:

    好吧,我找到了答案,我不知道为什么,但它对我有用:
    我必须创建一块砖,然后我可以使用上面提到的箱线图。

    s <- stack(DEM, Cluster)
    sbrick <- brick(s)  
    boxplot(sbrick[[1]], sbrick[[2]], xlab="Cluster", ylab="Elevation")
    

    导致这个情节boxplot DEM against cluster groups
    感谢大家的帮助!

    【讨论】:

      【解决方案2】:

      您可以使用rasterVis 库中的bwplot 函数。 以下是 rasterVis 的示例:

      library(raster)
      library(rasterVis)
      
      r <- raster(system.file("external/test.grd", package="raster"))
      s <- stack(r, r*2)
      bwplot(s,violin=FALSE,strip=strip.custom(strip.levels=TRUE))
      

      【讨论】:

      • 谢谢,我试过了,但结果是两个栅格彼此相邻而不是反对![Resulting boxplot] (dl.dropboxusercontent.com/u/32919877/Rplot.jpeg?raw=1)。
      • bwplot (dem, cluster) 应该可以解决您的问题。您还可以使用 zonal 函数手动创建箱线图。
      【解决方案3】:

      我不清楚您为什么会收到该错误。或许你可以运行下面的代码,自己看看:

      x <- stack(DEM, Cluster)
      s <- sampleRegular(s, 100000, useGDAL=TRUE)
      cn <- colnames(s)
      f <- as.formula(paste(cn[1], '~', cn[2]))
      boxplot(f, data=s)
      

      【讨论】:

      • 我在创建“f”对象后收到一条错误消息。 Error in parse(text = x, keep.source = FALSE) 可能是因为 cn 对象为 NULL(空)。但我可能刚刚找到了我正在检查的解决方案。
      【解决方案4】:

      也许您应该只提供您的栅格值作为矢量,然后让boxplot() 函数通过以下方式完成其余工作:

      boxplot(values(DEM) ~ values(Cluster), xlab="Cluster", ylab="Elevation")
      

      请注意,这仅在 DEM 和集群的范围和分辨率完全相同时才有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多