【问题标题】:How to combine two (or more) rasters that have different levels?如何组合两个(或更多)具有不同级别的栅格?
【发布时间】:2020-11-27 22:11:59
【问题描述】:

我想做的是将几个不同的作物收获栅格文件(例如大豆和玉米)合并到一张地图中。图例应显示作物的两种不同颜色。我将使用的数据是这个作物地图数据: 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(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'))

有什么想法我做错了吗?

【问题讨论】:

    标签: r raster r-raster


    【解决方案1】:

    目前尚不清楚您希望如何组合这些,尽管将它们转换为数据框以在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()
    

    【讨论】:

    • 谢谢,但我要合并的初始数据是栅格,这就是为什么我需要合并栅格而不是数据框的原因。你知道怎么做吗?
    • @RobinLindström 我知道 - 在我的示例中,我从您示例中的栅格开始,并将它们转换为数据框来绘制它们。这就是我的观点。
    • 好的,我可以使用 geom_tile 最后绘制世界地图还是必须将它们转换回栅格?
    • @RobinLindström 不,您可以完全根据 ggplot 中的数据框绘制世界地图
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多