4

我有一个包含 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)

在此处输入图像描述

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

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

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

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

在此处输入图像描述

4

0 回答 0