如何组合两个(或多个)具有不同级别的栅格?
How to combine two (or more) rasters that have different levels?
我想做的是将几个不同的作物收获栅格文件(例如大豆和玉米)合并到一张地图中。图例应显示作物的两种不同颜色。我将使用的数据是这个作物地图数据:
http://www.earthstat.org/harvested-area-yield-175-crops/
但我首先尝试在示例数据集上执行此操作:
library(raster)
r1 <- raster(nrow=10, ncol=10)
r1[] = sample(c(0,1), 100, replace = TRUE)
r1 <- ratify(r1)
rat <- levels(r1)[[1]]
rat$landcover <- c('NA', 'Maize')
rat$class <- c('A1', 'B2')
levels(r1) <- rat
r2 <- raster(nrow=10, ncol=10)
r2[] = sample(c(0,2), 100, replace = TRUE)
r2 <- ratify(r2)
rat <- levels(r2)[[1]]
rat$landcover <- c('NA', "Soybean")
rat$class <- c('A1', 'C3')
levels(r2) <- rat
如果我对这两个进行 levelplot 看起来不错
levelplot(r1, col.regions = c('white', 'blue'))
levelplot(r2, col.regions = c('white', 'green'))
但后来我尝试将它们组合起来,结果却很奇怪
rm = merge(r1,r2)
levelplot(rm, col.regions=c('white', 'blue', 'green'))
有什么地方做错了吗?
不清楚您希望如何组合这些,但将它们转换为数据帧以在 ggplot
中绘制会很简单:
df <- rbind(cbind(as.data.frame(rasterToPoints(r1)), raster = "r1"),
cbind(as.data.frame(rasterToPoints(r2)), raster = "r2"))
df$layer[df$layer == 0] <- NA
df$layer <- factor(c("Maize", "Soybean")[df$layer])
library(ggplot2)
ggplot(df, aes(x, y, fill = layer)) +
geom_tile(na.rm = TRUE, alpha = 0.3) +
scale_fill_manual(values = c("red", "forestgreen"), na.value = NA) +
theme_bw()
我想做的是将几个不同的作物收获栅格文件(例如大豆和玉米)合并到一张地图中。图例应显示作物的两种不同颜色。我将使用的数据是这个作物地图数据: http://www.earthstat.org/harvested-area-yield-175-crops/
但我首先尝试在示例数据集上执行此操作:
library(raster)
r1 <- raster(nrow=10, ncol=10)
r1[] = sample(c(0,1), 100, replace = TRUE)
r1 <- ratify(r1)
rat <- levels(r1)[[1]]
rat$landcover <- c('NA', 'Maize')
rat$class <- c('A1', 'B2')
levels(r1) <- rat
r2 <- raster(nrow=10, ncol=10)
r2[] = sample(c(0,2), 100, replace = TRUE)
r2 <- ratify(r2)
rat <- levels(r2)[[1]]
rat$landcover <- c('NA', "Soybean")
rat$class <- c('A1', 'C3')
levels(r2) <- rat
如果我对这两个进行 levelplot 看起来不错
levelplot(r1, col.regions = c('white', 'blue'))
levelplot(r2, col.regions = c('white', 'green'))
但后来我尝试将它们组合起来,结果却很奇怪
rm = merge(r1,r2)
levelplot(rm, col.regions=c('white', 'blue', 'green'))
有什么地方做错了吗?
不清楚您希望如何组合这些,但将它们转换为数据帧以在 ggplot
中绘制会很简单:
df <- rbind(cbind(as.data.frame(rasterToPoints(r1)), raster = "r1"),
cbind(as.data.frame(rasterToPoints(r2)), raster = "r2"))
df$layer[df$layer == 0] <- NA
df$layer <- factor(c("Maize", "Soybean")[df$layer])
library(ggplot2)
ggplot(df, aes(x, y, fill = layer)) +
geom_tile(na.rm = TRUE, alpha = 0.3) +
scale_fill_manual(values = c("red", "forestgreen"), na.value = NA) +
theme_bw()