我想根据多边形属性的不同组合为它们的栅格值创建直方图。以下是可复制的数据:
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
中的所有ID(即多边形)绘制直方图
ggplot(v, aes(layer)) + geom_histogram(aes(y = stat(count / sum(count))), binwidth = 0.25)
但是,我想基于rank
属性(即1,2,3)创建一组三个直方图,并基于place
属性创建另一组三个直方图(即a,b,c)。也许在ggplot中使用facet
,但是我不确定如何将v
中的ID链接到poly
中的属性。
答案 0 :(得分:1)
您的示例:
manipulator
为多边形分配一个明确的ID,仅保留感兴趣的变量,然后从SpatialPolygonsDataFrame中提取data.frame。
----------Just in case--how the script is added to document--------------
loadProjectCustomJS() {
runInAction(async () => {
thisfetchProjectJs().then((doc) => {
const body: HTMLBodyElement = document.getElementsByTagName('body')[0];
const customjs: HTMLScriptElement = document.createElement('script');
customjs.type = 'text/javascript';
customjs.id = 'customJsId'
customjs.src = doc.get('resourceUrl');
body.appendChild(customjs);
});
});
}
合并
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)
选择一个子集并制作直方图
poly$ID <- 1:length(poly)
poly$layer <- NULL
d <- data.frame(poly)