条件化 RasterStack 图的顶部和侧面条带

Strips at top and side for conditioned RasterStack plot

对于以下RasterStack,各个图层根据两个因素(大写字母和小写字母)进行分组。

library(raster)
s <- stack(replicate(6, raster(matrix(runif(100), 10))))
names(s) <- do.call(paste, c(expand.grid(LETTERS[1:2], letters[1:3]), sep='_'))
spplot(s)

我想避免重复级别的标签,最好是在顶部有一条带有标签 AB 的条带,在左侧或右侧有一条条带边上有标签 abc。类似于以下内容,但对于 RasterStack.

library(latticeExtra)
useOuterStrips(
    xyplot(y~x|grp1+grp2, 
           data.frame(x=runif(600), y=runif(600), 
                      grp1=rep(LETTERS[1:2], each=100), 
                      grp2=rep(letters[1:3], 200)),
           strip=strip.custom(style=1), as.table=TRUE))

我想要一个基于 lattice 的解决方案(包括 rasterVis::levelplot),因为这样我尝试创建的情节将与其他工作很好地融合在一起。也就是说,我愿意接受 ggplot2 解决方案。

我想我想多了...

library(tidyr)
cbind(as.data.frame(s), coordinates(s)) %>%
  gather(group, val, -x, -y) %>%
  separate(group, c('grp1', 'grp2'), '_') %>%
  levelplot(x=val~x+y|grp1+grp2, aspect='iso', 
            scales=list(alternating=FALSE, tck=1:0)) %>%
  useOuterStrips