如何绘制和叠加多个栅格的密度图?
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 创建
希望这正是您要找的。
我有几个栅格(实际上是从数字高程模型计算得出的结果)(使用栅格包创建),我想比较这些值的分布。一种可能的方法是绘制密度图并将它们覆盖在聊天中。
我实现了先做一个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 创建希望这正是您要找的。