【问题标题】:How to plot a world map using R如何使用 R 绘制世界地图
【发布时间】:2021-10-19 05:50:04
【问题描述】:

我正在开展一个项目,其中一小部分正在绘制一张包含我列表中的 135 个国家/地区的世界地图。我还有一个清单,说明它们是否已开发。

如何在世界地图中以不同的颜色显示开发状态?

我的数据看起来像这样

Country        Code      Developed
Brazil         BRA         1
Singapore      SIN         3
France         FRA         1
Poland         POL         2

我从另一个问题中拍摄了下面的图片,但理想情况下,它应该看起来像这样,但有更多的国家和 3 种不同的颜色。

谢谢

【问题讨论】:

    标签: r ggplot2 country-codes geom


    【解决方案1】:

    首先你需要安装包:

    install.packages(c("cowplot", "googleway", "ggplot2", "ggrepel", 
    "ggspatial", "libwgeom", "sf", "rnaturalearth", "rnaturalearthdata")
    

    之后,我们将加载所有地图所需的基本包,即 ggplot2 和 sf。我们还建议为 ggplot2 (theme_bw) 使用经典的暗光主题,这适用于地图:

    library("ggplot2")
    theme_set(theme_bw())
    library("sf")
    library("rnaturalearth")
    library("rnaturalearthdata")
    
    world <- ne_countries(scale = "medium", returnclass = "sf")
    class(world)
    
    ## [1] "sf"  
    ## [1] "data.frame"
    

    之后我们可以:

    ggplot(data = world) +
        geom_sf()
    

    结果会是这样的:

    在它之后,我们可以添加:

    ggplot(data = world) +
        geom_sf() +
        xlab("Longitude") + ylab("Latitude") +
        ggtitle("World map", subtitle = paste0("(", length(unique(world$NAME)), " countries)"))
    

    图表显示如下:

    最后,如果我们想要一些颜色,我们需要这样做:

    ggplot(data = world) +
        geom_sf(aes(fill = pop_est)) +
        scale_fill_viridis_c(option = "plasma", trans = "sqrt")
    

    这个例子显示了每个国家的人口。在这个例子中,我们使用“viridis”色盲友好调色板作为颜色渐变(使用 option = “plasma” 表示等离子变体),使用人口的平方根(存储在世界对象的变量 POP_EST 中)

    您可以在这里了解更多信息:

    https://r-spatial.org/r/2018/10/25/ggplot2-sf.html

    https://datavizpyr.com/how-to-make-world-map-with-ggplot2-in-r/

    https://slcladal.github.io/maps.html

    【讨论】:

    • 谢谢。这教我如何绘制地图,但不教我如何插入数据。
    • 看看链接你就知道了。 :)
    • @Rhedavetester 您可以使用left_join 将您的数据合并到世界上的sf 数据中。请注意国家代码或名称,查看countrycode 包以规范您的国家/地区名称
    【解决方案2】:

    如果你想用你自己的数据给它着色, 您将不得不相应地修改 world 数据框:

    library(rnaturalearth)
    library(rnaturalearthdata)
    library(ggplot2)
    library(tidyverse)
    
    world <- ne_countries(scale = "medium", returnclass = "sf")
    
    my_countries <- c("Aruba","Afghanistan", "Morocco", "Canada")
    
    world_modified <- world %>% 
      mutate(my_selection = ifelse(admin %in% my_countries,
                                   1, NA))
    
    
    ggplot(data = world_modified) +
      geom_sf(aes(fill=my_selection)) +
      theme_bw()
    

    reprex package (v2.0.0) 于 2021 年 10 月 19 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      相关资源
      最近更新 更多