【问题标题】:Plot a map in R - show only external borders在 R 中绘制地图 - 仅显示外部边界
【发布时间】:2018-02-14 16:29:49
【问题描述】:

我的问题是以色列地图,但我会用地图库中存在的美国数据提出问题,以使其更容易。我想它应该可以工作。

我知道如何在基本图和 ggplot 中控制地图的边界。我可以画它有或没有情节。但是,有时我想只绘制地图的外部边界,而不是跨州的边界(如下图所示)。

library(ggplot2)
library(maps)
all_states <- map_data("state")
ggplot(all_states, aes(x=long, y=lat, group=group, fill = region)) + 
geom_polygon(color = "black", size = 1) + coord_equal(ratio=1)  

另一个更复杂的问题:

现在让我们假设我有一种方法可以将特定状态分组到“区域”。假设我们将“南”和“北”的类别应用于每个州。 然后我想区分并能够控制 3 种不同类型的边界 - (1)国家的外部边界; (二)各地区的对外边界; (3) 各州的外部边界。

谢谢! 艾伦

【问题讨论】:

  • 我对类似问题here 的解决方案对您有用吗?
  • @Z.Lin 的解决方案是要走的路。您需要将多边形(状态)合并为一个所需的单元。从本质上讲,您需要第二个边界,而我不知道如何即时执行此操作。
  • 谢谢@Z.Lin,我想到了一个类似的解决方案作为解决方法,很有意义! :)
  • 你不能做 all_states

标签: r ggplot2 maps border shapefile


【解决方案1】:

在美国很容易

library(ggplot2)
library(maps)
border <- map_data("usa")

border 是一个数据框,因此您可以对其进行操作:

border %>% mutate(part = ifelse(region == "main", "south", "north"))

然后你就可以绘图了

 all_states <- map_data("state")
    ggplot(all_states, aes(x=long, y=lat, group=group, fill = region)) + 
      geom_polygon(color = "red", size = 5, data = border) + coord_equal(ratio=1) +
      geom_polygon(size = 1) + coord_equal(ratio=1) 

或者你可以画任何你想要的东西

但我怀疑地图包中是否包含有关以色列地区的信息。您需要下载包含有关以色列边界信息的形状文件。这里有http://www.gadm.org/country(Rspatial 多边形)。你会用谷歌搜索你能用它们做什么

【讨论】:

    【解决方案2】:

    或者,使用适当的 shapefile:

    library(rgdal)
    library(ggplot2)
    
    if (!file.exists("israel_geojson.tgz")) download.file("https://s3.amazonaws.com/osm-polygons.mapzen.com/israel_geojson.tgz", "israel_geojson.tgz")
    
    (untar("israel_geojson.tgz", list = TRUE))
    ##  [1] "./israel/"                          "./israel/admin_level_2.geojson"    
    ##  [3] "./israel/admin_level_other.geojson" "./israel/admin_level_95.geojson"   
    ##  [5] "./israel/admin_level_11.geojson"    "./israel/admin_level_94.geojson"   
    ##  [7] "./israel/admin_level_5.geojson"     "./israel/regions.geojson"          
    ##  [9] "./israel/admin_level_1.geojson"     "./israel/admin_level_12.geojson"   
    ## [11] "./israel/admin_level_3.geojson"     "./israel/admin_level_7.geojson"    
    ## [13] "./israel/admin_level_0.geojson"     "./israel/admin_level_13.geojson"   
    ## [15] "./israel/admin_level_10.geojson"    "./israel/admin_level_6.geojson"    
    ## [17] "./israel/admin_level_15.geojson"    "./israel/admin_level_4.geojson"    
    ## [19] "./israel/admin_level_9.geojson"     "./israel/admin_level_8.geojson"    
    

    According to Mapzen,他们的 admin layer 2 是大纲。

    israel <- readOGR("./israel/admin_level_2.geojson")
    israel_map <- fortify(israel)
    
    ggplot() +
      geom_map(data=israel_map, map=israel_map, aes(long, lat, map_id=id),
               color="#2b2b2b", fill="white") +
      ggalt::coord_proj("+proj=aeqd +lat_0=31.471357089512118 +lon_0=35.189208984375") +
      ggthemes::theme_map()
    

    【讨论】:

      【解决方案3】:

      正如Camille 所回答的,您可以使用dplyr::summarise() 来合并shapefile 的边框。例如:

      library(dplyr)
      library(ggplot2)
      
      
      shp <- ... # Load your shapefile here
      
      shp %>%
        summarise() %>%
          ggplot() +
            geom_sf()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多