select 栅格堆栈中的最大值并将图层名称显示为图例

select highest value in Raster stack and show layer name as legend

我有一个由 4 个栅格组成的栅格堆栈,并创建了一个栅格,每个像元显示 4 个图层中的最高值,如下所示:

library(raster)
stack_raster <- list()
var_name <- c("tmax","tmin","drought","flood")
for(i in seq_along(var_name)){
    var_ref <- var_name[i]
    r <- raster(ncol=10, nrow=10)
    names(r) <- var_ref
    set.seed(i)
    values(r) <- sample(100)
    stack_raster[[i]] <- r
  }

s <- raster::stack(stack_raster)
max_raster <- whiches.max(s)
plot(max_raster)

但是,在图例中,我想显示的不是数值,而是 贡献该值的实际栅格的名称。我怎样才能创建这样的地图?

您需要 which.max(s) 而不是 whiches.max(s)。然后,要绘制,最简单的事情可能是将 melt 栅格放入数据框中并将标签分配给 value 列并使用 ggplot 绘制结果 geom_tilegeom_raster

max_raster <- which.max(s)
df <- reshape2::melt(as.matrix(max_raster))
df$value <- factor(var_name[df$value], var_name)

library(ggplot2)

ggplot(df, aes(Var2, Var1, fill = value)) +
  geom_tile() +
  scale_y_reverse() +
  coord_equal() +
  scale_fill_brewer(palette = 'Set1') +
  theme_light()