【问题标题】:Map dropping countries when plotting with ggplot使用 ggplot 绘图时地图放置国家
【发布时间】:2020-07-02 20:39:20
【问题描述】:

好的,我很难按国家/地区映射一些数据。这是我正在使用的数据集的精简版本,位于一个名为“smaller”的对象中:

COUNTRY       ARRIVALS
Algeria         16          
American Samoa  2           
Angola          9           
Antigua Barbuda 2           
Argentina       18          
Aruba           4           
Australia       82          
Bahamas         12          
Bahrain          7          
Bangladesh      19  

这是我迄今为止在网上找到的代码:

library(tidyverse)

world_map <- map_data("world")

allmap <- left_join(smaller, world_map, by = c("COUNTRY" = "region"))

ggplot(allmap, aes(long, lat, group = group))+
  geom_polygon(aes(fill = ARRIVALS), color = "white")+
  scale_fill_viridis_c(option = "C")

但这会输出下面的地图,这根本不对。

让我知道我做错了什么。感谢您的帮助。

【问题讨论】:

    标签: r ggplot2 gis sf tmap


    【解决方案1】:

    您应该使用full_join()。来自文档:

    变异连接将列从 y 添加到 x,根据 键:

    inner_join(): 包括 x 和 y 中的所有行。

    left_join(): 包括 x 中的所有行。

    right_join(): 包括 y 中的所有行。

    full_join(): 包括 x 或 y 中的所有行。

    像这样:

    library(tidyverse)
    
    smaller <-
      tibble::tribble(
        ~COUNTRY, ~ARRIVALS,
        "Algeria", 16L,
        "American Samoa",  2L,
        "Angola",  9L,
        "Antigua Barbuda",  2L,
        "Argentina", 18L,
        "Aruba",  4L,
        "Australia", 82L,
        "Bahamas", 12L,
        "Bahrain",  7L,
        "Bangladesh", 19L
      )
    
    world_map <- map_data("world")
    
    allmap <- full_join(smaller, world_map, by = c("COUNTRY" = "region"))
    
    ggplot(allmap, aes(long, lat, group = group))+
      geom_polygon(aes(fill = ARRIVALS), color = "white")+
      scale_fill_viridis_c(option = "C")
    

    reprex package (v0.3.0) 于 2020 年 7 月 2 日创建

    【讨论】:

      【解决方案2】:

      如果您还将world_map 绘制为单独的层,则左连接有效:

      library(tidyverse)
      
      world_map <- map_data("world")
      
      smaller <- structure(list(COUNTRY = c("Algeria", "American Samoa", "Angola", 
                  "Antigua Barbuda", "Argentina", "Aruba", "Australia", "Bahamas", 
                  "Bahrain", "Bangladesh"), ARRIVALS = c(16, 2, 9, 2, 18, 4, 82, 
                   12, 7, 19)), class = "data.frame", row.names = c(NA, -10L))
      
      allmap <- left_join(smaller, world_map, by = c("COUNTRY" = "region"))
      
      ggplot(allmap, aes(long, lat, group = group))+
        geom_polygon(data = world_map, fill = "#306020", colour = "#00000010") +
        geom_polygon(aes(fill = ARRIVALS), colour = "white") +
        scale_fill_viridis_c(option = "C") +
        theme_classic() +
        theme(panel.background = element_rect(fill = "#101045")) +
        coord_equal()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多