在R中绘制地图 - 仅显示外部边界

时间:2017-09-06 08:57:29

标签: r ggplot2 maps border shapefile

我的问题在于以色列的地图,但我问问地图库中存在的美国数据这个问题是为了让它更容易。我想它应该有效。

我知道如何在基本情节和ggplot中控制地图的边框。无论是否有情节,我都可以画画。但是,我希望有时只绘制地图的外部边框,而不是跨州的边界(如下图所示)。

<?php
  ini_set("display_errors", "1");
  error_reporting(E_ALL);
?>

另一个问题有点复杂:

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

谢谢! 艾伦

3 个答案:

答案 0 :(得分:4)

或者,使用正确的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,他们的管理层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()

enter image description here

答案 1 :(得分:0)

美国很容易

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 polygon)。你会谷歌你可以用它们做什么

答案 2 :(得分:0)

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

library(dplyr)
library(ggplot2)


shp <- ... # Load your shapefile here

shp %>%
  summarise() %>%
    ggplot() +
      geom_sf()