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

时间:2016-03-23 10:14:37

标签: 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)

enter image description here

如您所见,具有较低值数据的图像是一种颜色(实际上,在我的实际数据中,大多数图是一种颜色,因为数据范围由两个后面的栅格控制)。使用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)

enter image description here

0 个答案:

没有答案