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

问题描述

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

我意识到先堆叠然后再网格封装,但是栅格具有不同的分辨率(目的是测试不同分辨率对结果计算的影响。

我最近对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)

对于盒式或小提琴绘图,该组通常在x轴上,并且值映射到y轴。

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

ggplot(df,y = value)) +
  geom_violin()

reprex package(v0.3.0)于2020-10-04创建

希望这就是您想要的。