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_tile
或 geom_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()
我有一个由 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_tile
或 geom_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()