【问题标题】:R: plotting neighbouring countries using maptoolsR:使用地图工具绘制邻国
【发布时间】:2013-08-07 11:34:03
【问题描述】:

假设我正在使用地图工具在世界地图上绘制国家,如果我要绘制一个国家,有没有办法以不同的颜色绘制与这个国家接壤的国家?我使用的是maptools自带的shapefilewrld_simpl,所以说我绘制中国:

plot(wrld_simpl[wrld_simpl$NAME=='China',], col='red', add=T)

有没有办法让它将所有与中国接壤的国家都绘制出来。我希望能够为许多不同的国家/地区执行此操作,因此理想情况下我想要一个通用的解决方案,而不仅仅是针对中国的解决方案。

【问题讨论】:

    标签: r plot maptools world-map


    【解决方案1】:

    rgeos 中的gTouchesgIntersects 怎么样?

    library(rgeos)
    library(maptools)
    wc <- subset(wrld_simpl, NAME == "China")
    world <- subset(wrld_simpl, !NAME == "China")
    

    创建一个向量来存储测试:

    tst <- logical(nrow(world))
    

    做测试:

    for (i in 1:nrow(world)) {
        tst[i] <- gTouches(wc, world[i,])
    }
    

    查看结果:

    levels(world$NAME)[world$NAME[tst]]
    [1] "India"  "Russia"
    
    plot(wc)
    plot(world[tst, ], add = TRUE, col = "grey")
    

    (不会就世界事务进行进一步的通信,但 gIntersects 似乎给出了更好的答案)。

    强烈建议您谨慎对待这些内置数据集,如果您要将此类工具用于任何重要目的,您当然需要获得可靠的数据。几何和数据已经够棘手了。 :)

    for (i in 1:nrow(world)) {
         tst[i] <- gIntersects(wc, world[i,])
     }
    length(levels(world$NAME)[world$NAME[tst]])
    [1] 14
     plot(world[tst, ], col = "firebrick")
     plot(wc, add = TRUE, col = "grey")
    

    【讨论】:

    • 这是一个很好的解决方案,尤其是 gIntersects,谢谢!
    最近更新 更多