r - examples - ggmap mexico
Mapa de regiones administrativas de un paĆs con ggmap y ggplot2 (2)
Puedo hacer un gráfico de desempleo a nivel estatal de EE. UU. Con el siguiente código.
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
Ahora quiero un gráfico similar para Pakistán. Los resultados de mis pocos intentos están abajo:
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)
y
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)
Country2 <- Country1 + geom_polygon(data = Pakistan
, aes(x=x, y=y)
, color = ''white'', alpha = .75, size = .2)
print(Country2)
Preguntas
Me pregunto cómo obtener el mapa de las regiones administrativas de Pakistán a partir de Estados Unidos. Sé que para esto necesitamos longitud y latitud de límites administrativos. Me pregunto cómo obtener la longitud y la latitud de los límites administrativos para un país. Probé Áreas Administrativas Globales pero sin éxito. Cualquier ayuda en este asunto será muy apreciada. Gracias
¿Has probado http://www.diva-gis.org/gdata ? Eso debería proporcionarle Shapefiles con límites de estado / distrito para Pakistán.
El paquete maptools tiene funciones que le permiten leer y convertir Shapefiles en un marco de datos que se puede usar para diseñar los polígonos de límites.
No conozco el nivel espacial de las áreas administrativas que necesita, pero aquí hay dos formas de leer en datos de shapefile y formatos de .RData de Global Administrative Areas (gadm.org) , y convertirlos en marcos de datos para usar en ggplot2. Además, para replicar el mapa de EE. UU., Deberá trazar los nombres de las áreas administrativas ubicadas en los centroides poligonales.
library(ggplot2)
library(rgdal)
Método 1. SpatialPolygonDataFrames almacenado como 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")
Método2. Formato de shapefile leído con rgdal :: readOGR
pakistan.adm2.spdf <- readOGR("/Users/jmuirhead/Downloads/PAK_adm", "PAK_adm2",
verbose = TRUE, stringsAsFactors = FALSE)
Crear un data.frame desde spatialPolygonDataframes y fusionar con un data.frame que contenga la información sobre el desempleo, por ejemplo.
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)
Extracción de nombres y centoides de áreas administrativas para el trazado.
# 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.adm2.spdf@data[,''ID_2'']
pakistan.adm2.centroids.df[, ''NAME_2''] <- pakistan.adm2.spdf@data[,''NAME_2'']
Crear ggplot con etiquetas para áreas administrativas.
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)