问题描述
我有几个栅格(有效地根据数字高程模型计算得出的栅格)(使用栅格数据包创建),我想比较这些值的分布。一种可能的方法是绘制密度图并将其覆盖在聊天中。
我意识到先堆叠然后再网格封装,但是栅格具有不同的分辨率(目的是测试不同分辨率对结果计算的影响。
我最近对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创建
希望这就是您想要的。