使用 levelplot (RasterVis) 对栅格堆栈进行分类

Sam*_*Sam 6 r classification raster levelplot rastervis

我有一个由 7 个栅格组成的栅格堆栈,其数据范围差异很大,并且并非所有栅格都遵循完全相同的范围。(有些是低值范围,有些是高得多)。将 levelplot 函数与堆栈一起使用,它可以很好地绘制,例如:

r <- raster(ncol=10,nrow=10)
r[] <- sample(c(1:3),size=100,replace=T)
r1 <- raster(ncol=10,nrow=10)
r1[] <- sample(c(1:9),size=100,replace=T)
r2 <- raster(ncol=10,nrow=10)
r2[] <- sample(c(5:15),size=100,replace=T)
r3 <- raster(ncol=10,nrow=10)
r3[] <- sample(c(3:35),size=100,replace=T)
s <- stack(r,r1,r2,r3)

breaks <- 7
my.at <- round(seq(min(minValue(s)), max(maxValue(s)), length.out = breaks),digits=2)
myColorkey <- list(at=my.at,height=0.95, width=1, labels=list(at=my.at,cex=1.1))
cols <- (brewer.pal(length(my.at)-1, "YlGnBu"))
levelplot(s,at=my.at,col.regions=cols,colorkey = myColorkey)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

正如您所看到的,具有较低值数据的图像是一种颜色(实际上,在我的真实数据中,大多数图都是一种颜色,因为数据范围由后两个栅格主导)。使用 levelplot 函数,我想对整个栅格堆栈进行重新分类,用我定义的一些类梳理出较低值栅格中的一些模式,并简单地将任何超过值 x(可能是上面示例数据中的 10)的值分配为一种颜色。

批准和设置级别的常用方法不适用于堆栈,并且我尝试过的任何解决方法(使用矩阵和重新分类)都不会强制比栅格的类更多的级别

这是我的解决方法,使用标准图例,但如果可能的话我想使用ratify等;

# using s from above
m <- c(0,1,1,  1,3,2,  3,6,3,  6,10,4,  10,35,5)
mat <- matrix(m, ncol=3, byrow=TRUE)
src <- reclassify(s, mat)

breaks <- nrow(mat)
my.at <- (0:breaks)
myColorkey <- list(at=my.at,height=0.95, width=1, labels=list(at=my.at+0.5,labels=c("0-1","1-3","3-6","6-10","10-35"),cex=1.1))
cols <- (brewer.pal(length(my.at)-1, "YlGnBu"))

levelplot(src,at=my.at,col.regions=cols,colorkey = myColorkey)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述