如何创建仅包含两个类别的分类栅格值的箱线图?

时间:2018-09-13 17:16:13

标签: r classification raster boxplot

我有一个分类的栅格,其中包含12个类别,分别代表土地利用,分别为“ 1”,“ 2”,“ 3”等。我有第二个栅格,其中包含一些代表蒸散速率的值。 我正在尝试为2类和10类的蒸散速率创建箱线图。

我能够创建箱形图,但是它们包含所有类,但是我只想获取第2类和第10类。

下面的代码: r (包含12个类别的分类栅格)和 evapo (包含蒸散值)的栅格

 boxplot(evapo, r)

任何帮助都会很棒!

3 个答案:

答案 0 :(得分:1)

library(raster)
library(ggplot2)
library(dplyr)
r <- raster(nc=10, nr=5)
r[] <- runif(ncell(r), min=10, max=20) * 2
#plot(r)
s <- setValues(r,
               sample(c(1:4), replace = T, size=50)
               )
plot(s)
ct <- crosstab(r,s, useNA=TRUE, long=TRUE)
ct2 <- ct[ rep( seq(dim(ct)[1]), ct$Freq), ]

ggplot(filter(ct2, layer.2 %in% c(1,2)), aes(y=as.numeric(layer.1), x=layer.2)) +
  geom_boxplot()

enter image description here

答案 1 :(得分:1)

这是Paulo解决方案的一种变体

library(raster)
r <- raster(nc=10, nr=5)
r[] <- runif(ncell(r), min=10, max=20) * 2
s <- setValues(r, sample(c(1:4), replace = T, size=50))

rs <- stack(r, s)
names(rs) <- c('r', 's')

d <- as.data.frame(rs)
# all classes
boxplot(r~s, data= d)
# only class 2 and 4
boxplot(r~s, data=d[d$s %in% c(2,4), ])

如果由于栅格太大而无法制作d,则可以采用大样本代替以获得近似结果

n <- 10000
d <- data.frame(sampleRegular(rs, n))

答案 2 :(得分:0)

无法看到您的数据集,我不确定该解决方案是否适合您,但这应该对您有帮助。

boxplot(evapo[which(class == 2 | 10)], r[which(class == 2 | 10)])

或者,您可以从evapo和r中生成“新”栅格,其中仅包含类别为2和10的信息,然后使用这些信息运行箱形图。