2017-09-06 6 views
2

Mon problème est avec une carte d'Israël, mais je voudrais poser la question avec des données américaines qui existent dans la bibliothèque de cartes pour le rendre plus facile. Je suppose que ça devrait marcher.Tracer une carte dans R - montrer seulement les frontières externes

Je sais comment contrôler les bordures d'une carte à la fois sur le tracé de base et dans ggplot. Je peux le dessiner avec ou sans intrigues. Cependant, je voudrais parfois dessiner seulement les frontières extérieures de la carte, et non les frontières à travers les états (comme dans le dessin ci-dessous).

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) 

Une autre question qui est un peu plus complexe:

Imaginons maintenant que j'ai un moyen de regrouper des états spécifiques aux « régions ». Imaginons que nous appliquions une catégorie de «sud» et «nord» à chaque état. Ensuite, je voudrais différencier et être en mesure de contrôler 3 types de frontières différentes - (1) la frontière extérieure du pays; (2) la frontière extérieure de chaque région; (3) la frontière extérieure de chaque état.

Merci! Alan

+0

Est-ce que ma solution à une question similaire travail [ici] (https://stackoverflow.com/a/45931429/8449629) pour vous? –

+0

@ La solution de Z.Lin est la voie à suivre. Vous devez fusionner les polygones (états) en une seule unité désirée. En substance, vous avez besoin d'une deuxième frontière et je ne connais aucun moyen de le faire à la volée. –

+0

Merci @ Z.Lin, j'ai pensé à une solution similaire comme une solution de rechange, a du sens! :) – alanarazi7

Répondre

0

Avec USA, il est facile

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

frontière est une trame de données afin que vous puissiez le manipuler ex:

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

Ensuite, vous pouvez tracer

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) 

ou vous peut dessiner ce que vous voulez

Cependant, je doute qu'il existe des informations sur les régions d'Israël dans le paquet de cartes. Vous devez télécharger des fichiers de formes contenant les informations sur les frontières israéliennes. Il y a http://www.gadm.org/country (polygone spatial). Vous google ce que vous pouvez faire avec eux

3

Ou, utilisez un fichier de forme appropriée:

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, leur couche admin 2 est le contour.

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