Mappa delle regioni amministrative di un paese con ggmap e ggplot2

Posso creare il grafico di disoccupazione a livello statale USA con il seguente codice.

library(XML) library(ggplot2) library(plyr) library(maps) unemp <- readHTMLTable('http://www.bls.gov/web/laus/laumstrk.htm', colClasses = c('character', 'character', 'numeric'))[[2]] names(unemp) <- c('rank', 'region', 'rate') unemp$region <- tolower(unemp$region) us_state_map <- map_data('state') map_data <- merge(unemp, us_state_map, by = 'region') map_data <- arrange(map_data, order) states <- data.frame(state.center, state.abb) p1 <- ggplot(data = map_data, aes(x = long, y = lat, group = group)) p1 <- p1 + geom_polygon(aes(fill = cut_number(rate, 5))) p1 <- p1 + geom_path(colour = 'gray', linestyle = 2) p1 <- p1 + scale_fill_brewer('Unemployment Rate (Jan 2011)', palette = 'PuRd') p1 <- p1 + coord_map() p1 <- p1 + geom_text(data = states, aes(x = x, y = y, label = state.abb, group = NULL), size = 2) p1 <- p1 + theme_bw() p1 

inserisci la descrizione dell'immagine qui

Ora voglio un tipo di grafico simile per il Pakistan. I miei pochi tentativi di risultati sono qui sotto:

 data(world.cities) Pakistan <- data.frame(map("world", "Pakistan", plot=FALSE)[c("x","y")]) p <- ggplot(Pakistan, aes(x=x, y=y)) + geom_path(colour = 'green', linestyle = 2) + coord_map() + theme_bw() p <- p + labs(x=" ", y=" ") p <- p + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank()) p <- p + theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank()) p <- p + theme(panel.border = element_blank()) print(p) 

inserisci la descrizione dell'immagine qui

e

 library(mapproj) Country <- "Pakistan" Get_Map_Country <- get_map( location = Country , zoom = 5 , scale = "auto" , maptype = "roadmap" , messaging = FALSE , urlonly = FALSE , filename = "ggmapTemp" , crop = TRUE , color = "color" , source = "google" , api_key ) Country1 <- ggmap( ggmap = Get_Map_Country , extent = "panel" # , base_layer , maprange = FALSE , legend = "right" , padding = 0.02 , darken = c(0, "black") ) Country1 <- Country1 + labs(x="Longitude", y="Latitude") print(Country1) 

inserisci la descrizione dell'immagine qui

 Country2 <- Country1 + geom_polygon(data = Pakistan , aes(x=x, y=y) , color = 'white', alpha = .75, size = .2) print(Country2) 

inserisci la descrizione dell'immagine qui

Domande

Mi chiedo come ottenere la mappa delle regioni amministrative del Pakistan come degli Stati Uniti. So per questo che abbiamo bisogno di longitudine e latitudine dei confini amministrativi. Mi chiedo come ottenere longitudine e latitudine dei confini amministrativi per un paese. Ho provato le aree amministrative globali ma senza successo. Qualsiasi aiuto a riguardo sarà molto apprezzato. Grazie

Non conosco il livello spaziale delle aree amministrative necessarie, ma ecco due modi per leggere i dati shapefile e i formati .RData dalle aree amministrative globali (gadm.org) e convertirli in frame di dati da utilizzare in ggplot2. Inoltre, per replicare la mappa degli Stati Uniti, è necessario tracciare i nomi delle aree amministrative situate nei centroidi del poligono.

 library(ggplot2) library(rgdal) 

Metodo 1. SpatialPolygonDataFrames memorizzati come formato .RData

 # Data from the Global Administrative Areas # 1) Read in administrative area level 2 data load("/Users/jmuirhead/Downloads/PAK_adm2.RData") pakistan.adm2.spdf <- get("gadm") 

Method2. Formato shapefile letto con rgdal :: readOGR

 pakistan.adm2.spdf <- readOGR("/Users/jmuirhead/Downloads/PAK_adm", "PAK_adm2", verbose = TRUE, stringsAsFactors = FALSE) 

Creazione di un data.frame da spatialPolygonDataframes e fusione con un data.frame contenente le informazioni sulla disoccupazione, ad esempio.

 pakistan.adm2.df <- fortify(pakistan.adm2.spdf, region = "NAME_2") # Sample dataframe of unemployment info unemployment.df <- data.frame(id= unique(pakistan.adm2.df[,'id']), unemployment = runif(n = length(unique(pakistan.adm2.df[,'id'])), min = 0, max = 25)) pakistan.adm2.df <- merge(pakistan.adm2.df, unemployment.df, by.y = 'id', all.x = TRUE) 

Estrazione di nomi e centoids di aree amministrative per la stampa

 # Get centroids of spatialPolygonDataFrame and convert to dataframe # for use in plotting area names. pakistan.adm2.centroids.df <- data.frame(long = coordinates(pakistan.adm2.spdf)[, 1], lat = coordinates(pakistan.adm2.spdf)[, 2]) # Get names and id numbers corresponding to administrative areas pakistan.adm2.centroids.df[, 'ID_2'] <- pakistan.a[email protected][,'ID_2'] pakistan.adm2.centroids.df[, 'NAME_2'] <- [email protected][,'NAME_2'] 

Crea ggplot con etichette per le aree amministrative

 p <- ggplot(pakistan.adm2.df, aes(x = long, y = lat, group = group)) + geom_polygon(aes(fill = cut(unemployment,5))) + geom_text(data = pakistan.adm2.centroids.df, aes(label = NAME_2, x = long, y = lat, group = NAME_2), size = 3) + labs(x=" ", y=" ") + theme_bw() + scale_fill_brewer('Unemployment Rate (Jan 2011)', palette = 'PuRd') + coord_map() + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank()) + theme(axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank()) + theme(panel.border = element_blank()) print(p) 

Risultati di esempio per la disoccupazione del Pakistan

Hai provato http://www.diva-gis.org/gdata ? Questo dovrebbe darti Shapefile con confini statali / distrettuali per il Pakistan.

Il pacchetto maptools ha funzioni che consentono di leggere e convertire gli Shapefile in un dataframe che può essere utilizzato per disporre i poligoni del contorno.