Как создать коробчатую диаграмму, содержащую значения классифицированного растра только для двух классов?

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

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

Ниже кода с: ррong>, классифицированный растр, содержащий 12 классов, и испариться, растр, содержащий значения эвапотранспирации.

 boxplot(evapo, r)

Любая помощь была бы замечательной!

Вам придется подмножество. Пожалуйста, предоставьте пример данных для создания воспроизводимый пример.

Anonymous coward 13.09.2018 20:41
0
1
309
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

Ответ принят как подходящий

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

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))

Другие вопросы по теме