Как создать коробочный график, содержащий значения классифицированного растра только для двух классов? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть классифицированный растр, содержащий 12 классов с именами «1», «2», «3» и т. Д., Представляющих землепользование. У меня есть второй растр, содержащий некоторые значения, представляющие скорость испарения. Я пытаюсь создать коробку для скорости испарения для классов 2 и 10.

Мне удалось создать коробочные диаграммы, но они содержат все классы, но я хочу получить только классы 2 и 10.

Ниже кода с: r , классифицированный растр, содержащий 12 классов и steam , растр, содержащий значения суммарного испарения

 boxplot(evapo, r)

Любая помощь будет отличной!

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018
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

0 голосов
/ 14 сентября 2018

Вот вариант решения Пауло

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))
0 голосов
/ 13 сентября 2018

Не имея возможности увидеть ваш набор данных, я не могу быть уверен, что это решение подойдет вам, но это должно вам помочь.

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

В качестве альтернативы вы можете сгенерировать «новый» растр из ваших выпадений и r, которые содержат информацию только о классах 2 и 10, а затем запустить блокпост с ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...