如何绘制和叠加多个栅格的密度图?

How can I plot and overlay density plot of several rasters?

我有几个栅格(实际上是从数字高程模型计算得出的结果)(使用栅格包创建),我想比较这些值的分布。一种可能的方法是绘制密度图并将它们覆盖在聊天中。

我实现了先做一个stack然后lattice封装,但是栅格有不同的分辨率(目的是测试不同分辨率的结果计算的效果。

我最近对 ​​ggplot2 包有点满意,但据我所知,它不能处理栅格数据类型。

任何人都可以建议一个包或技术来绘制多密度图(甚至其他类型,如盒须图)以比较不同栅格的特征吗?

我不太确定你在追求什么,但我还是要试一试。

假设我们有以下不同分辨率的栅格列表,我们有兴趣使用 ggplot2 包绘制栅格内值的分布。

library(raster)
#> Loading required package: sp
library(ggplot2)

rasterlist <- list(
  raster1 = raster(matrix(runif(100), 10)),
  raster2 = raster(matrix(rnorm(25), 5)),
  raster3 = raster(matrix(rpois(64, 2), 8))
)

我们要做的是将栅格数据转换为 ggplot2 可以理解的格式,即长格式(与宽数据相对)。这意味着每个观察结果,在栅格情况下每个单元格,都应该在 data.frame 中各自的行中。我们通过使用 as.vector() 转换每个光栅并指示原点光栅来做到这一点。

df <- lapply(names(rasterlist), function(i) {
  data.frame(
    rastername = i,
    value = as.vector(rasterlist[[i]])
  )
})
df <- do.call(rbind, df)

既然数据的格式正确,您可以将其提供给 ggplot。对于密度图,x 位置应该是值。设置fill = rastername会自动判断分组。

ggplot(df, aes(x = value, fill = rastername)) +
  geom_density(alpha = 0.3)

对于 box- 或 violin-plots,组通常在 x-axis 上,值映射到 y-axis。

ggplot(df, aes(x = rastername, y = value)) +
  geom_boxplot()

ggplot(df, aes(x = rastername, y = value)) +
  geom_violin()

reprex package (v0.3.0)

于 2020-10-04 创建

希望这正是您要找的。