R извлечь растр и гистограмму для различных атрибутов пространственного полигона - PullRequest
0 голосов
/ 28 апреля 2019

Я хотел бы создать гистограммы растровых значений для полигонов на основе различных комбинаций их атрибутов.Воспроизводимые данные ниже:

library(raster)
library(sp)   
poly <- raster(nrow=10, ncol=10)
poly[] <- runif(ncell(poly)) * 10
poly <- rasterToPolygons(poly, fun=function(x){x > 9})
r <- raster(nrow=100, ncol=100)
r[] <- runif(ncell(r))
poly@data$place<-sample(letters[1:3], length(poly), TRUE)
poly@data$rank<-sample.int(3, length(poly), replace = TRUE)
plot(r)
plot(poly, add=TRUE, lwd=4) 
v <- raster::extract(r, poly, df=TRUE)

Я могу построить гистограмму для всех идентификаторов (т.е. полигонов) в v с ggplot

ggplot(v, aes(layer)) + geom_histogram(aes(y = stat(count / sum(count))), binwidth = 0.25)

enter image description here

Однако я бы хотел создать набор из трех гистограмм на основе атрибута rank (т. Е. 1,2,3) и еще один набор из трех гистограмм на основе place атрибут (то есть a, b, c).Возможно, используя facet в ggplot, но я не уверен, как связать идентификаторы в v с атрибутами в poly.

1 Ответ

1 голос
/ 28 апреля 2019

Ваш пример:

library(raster)
#Loading required package: sp
pr <- raster(nrow=10, ncol=10)
set.seed(1)
values(pr) <- runif(ncell(pr)) * 10
poly <- rasterToPolygons(pr, fun=function(x){x > 9})
poly$place <- sample(letters[1:3], length(poly), TRUE)
poly$rank <- sample.int(3, length(poly), replace = TRUE)

r <- raster(nrow=100, ncol=100)
values(r) <- runif(ncell(r))
v <- raster::extract(r, poly, df=TRUE)

Присвойте явный идентификатор полигонам, сохраните только переменные, представляющие интерес, и извлеките data.frame из SpatialPolygonsDataFrame.

poly$ID <- 1:length(poly)
poly$layer <- NULL
d <- data.frame(poly)

Слияние

vd <- merge(d, v, by="ID")

Выберите подмножество и создайте гистограмму

x <- vd[vd$place == "a",]
hist(x$layer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...