instalar ggplot descargar como barplot r ggplot2

descargar - Reubicación de Alaska y Hawaii en el mapa temático de EE. UU. Con ggplot2



ggplot2 histogram (3)

He aquí cómo hacerlo mediante la proyección y la transformación. Necesitará:

require(maptools) require(rgdal) fixup <- function(usa,alaskaFix,hawaiiFix){ alaska=usa[usa$STATE_NAME=="Alaska",] alaska = fix1(alaska,alaskaFix) proj4string(alaska) <- proj4string(usa) hawaii = usa[usa$STATE_NAME=="Hawaii",] hawaii = fix1(hawaii,hawaiiFix) proj4string(hawaii) <- proj4string(usa) usa = usa[! usa$STATE_NAME %in% c("Alaska","Hawaii"),] usa = rbind(usa,alaska,hawaii) return(usa) } fix1 <- function(object,params){ r=params[1];scale=params[2];shift=params[3:4] object = elide(object,rotate=r) size = max(apply(bbox(object),1,diff))/scale object = elide(object,scale=size) object = elide(object,shift=shift) object }

Luego lee en tu shapefile. Use rgdal :

us = readOGR(dsn = "states_21basic",layer="states")

Ahora transfórmalo a un área igual y ejecuta la función de corrección:

usAEA = spTransform(us,CRS("+init=epsg:2163")) usfix = fixup(usAEA,c(-35,1.5,-2800000,-2600000),c(-35,1,6800000,-1600000)) plot(usfix)

Los parámetros son rotaciones, escalado, desplazamiento xey para Alaska y Hawai, respectivamente, y se obtuvieron por ensayo y error. Ajústalos con cuidado. Incluso el cambio del parámetro de escala de Hawai a 0.99999 lo envió fuera del planeta debido a la gran cantidad de personas involucradas.

Si quieres regresar esto a lat-long:

usfixLL = spTransform(usfix,CRS("+init=epsg:4326")) plot(usfixLL)

Pero no estoy seguro si necesita usar las transformaciones en ggplot ya que lo hemos hecho con spTransform .

Ahora puede saltar a través del ggplot2 fortalecer ggplot2 . No estoy seguro si es importante para usted, pero tenga en cuenta que el orden de los estados es diferente en la versión de usfix : Alaska y Hawai son ahora los dos últimos estados.

Intento crear un mapa temático que muestre los 50 estados de EE. UU., Pero estoy teniendo problemas para trasladar Alaska y Hawai de manera confiable. Tengo un par de ideas, pero ninguna de ellas funciona bien. Los demostraré ahora.

Primero, necesitamos importar los datos; usar los datos en el paquete de maps no es suficiente porque no incluye Hawai y Alaska.

setwd(tempdir()) download.file("https://dl.dropbox.com/s/wl0z5rpygtowqbf/states_21basic.zip?dl=1", "usmapdata.zip", method = "curl") # This is a mirror of http://www.arcgis.com/home/item.html? # id=f7f805eb65eb4ab787a0a3e1116ca7e5 unzip("usmapdata.zip") require(rgdal) all_states <- readOGR("states_21basic/", "states") require(ggplot2); require(maptools); require(rgeos); require(mapproj); all_states <- fortify(all_states, region = "STATE_NAME")

Ahora definimos algunas estéticas de trama:

p <- ggplot() + geom_polygon( aes(x=long, y=lat, group = group, fill = as.numeric(as.factor(id))), colour="white", size = 0.25 ) + coord_map(projection="azequalarea") + scale_fill_gradient(limits = c(1,50))

Ahora eliminamos todo el fondo, etc. para que no entren en conflicto cuando superponemos los estados no contiguos:

p <- p + theme(axis.line=element_blank(), axis.text.x=element_blank(), axis.text.y=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank(), panel.background=element_blank(), panel.border=element_blank(), panel.grid.major=element_blank(), panel.grid.minor=element_blank(), plot.background=element_blank())

Usando ventanas

La primera idea que tuve fue usar viewports:

AK <- p %+% subset(all_states, id == "Alaska") + theme(legend.position = "none") HI <- p %+% subset(all_states, id == "Hawaii") + theme(legend.position = "none") contiguous <- p %+% subset(all_states, id != "Alaska" & id != "Hawaii") grid.newpage() vp <- viewport(width = 1, height = 1) print(contiguous, vp = vp) subvp1 <- viewport(width = 0.25, height = 0.25, x = 0.18, y = 0.33) print(AK, vp = subvp1) subvp2 <- viewport(width = 0.12, height = 0.12, x = 0.32, y = 0.27) print(HI, vp = subvp2)

Esto se ve bien, pero no es satisfactorio porque es muy sensible a pequeños cambios en la figura, por ejemplo, cambio de tamaño o cambios en el tamaño y la forma de la leyenda.

Manualmente moviendo Alaska y Hawaii

all_states_AKHImoved <- within(all_states, { lat[id == "Alaska"] <- lat[id == "Alaska"] - 45 long[id == "Alaska"] <- long[id == "Alaska"] + 40 lat[id == "Hawaii"] <- lat[id == "Hawaii"] + 0 long[id == "Hawaii"] <- long[id == "Hawaii"] + 70 }) p %+% all_states_AKHImoved

Esto no es satisfactorio porque Alaska generalmente no escala en la mayoría de los mapas de EE. UU., Por lo que se ve muy grande. También la reubicación de Alaska y Hawaii cambia la distorsión introducida por la proyección del mapa.

Pregunta

¿Alguien tiene mejores enfoques?


Una vez que comience a cambiar las cosas de esta manera, simplemente represente Alaska y Hawai como cuadros cuadrados en algún lugar del Golfo de México. Tendría la ventaja adicional de poder decir de qué color era Hawaii.

Probablemente podrías ir hasta el final y usar un sistema distorsionado donde cada estado tenga el mismo área, entonces podrías ver Rhode Island.

Los ejemplos de Cartogram de EE. UU. En las imágenes de Google muestran el tipo de cosas. Sin embargo, no sé cuántos de ellos tienen shapefiles o datos con ellos.

¿Está realmente interesado en los tamaños relativos de los estados, o quiere una representación que permita a las personas ver cuál es el valor de un estado?


fiftystater paquete fiftystater R en CRAN para proporcionar una solución simple. Se basa en los pasos de la respuesta de Spacedman (sería un enlace pero insuficiente representante) y se publica como un marco de datos ggplot2::geom_map ready shape llamado fifty_states para eliminar la necesidad de instalar dependencias, rastrear un archivo de formas de origen o modificar los valores de elide .

library(ggplot2) library(mapproj) library(fiftystater) crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) p <- ggplot(crimes, aes(map_id = state)) + geom_map(aes(fill = Assault), map = fifty_states) + expand_limits(x = fifty_states$long, y = fifty_states$lat) + coord_map() p

mapa de cincuenta estados

El ruido de la trama se puede limpiar de la manera habitual, y también existe la función fifty_states_inset_boxes en el paquete para agregar cuadros insertados:

p + scale_x_continuous(breaks = NULL) + scale_y_continuous(breaks = NULL) + labs(x = "", y = "") + theme(panel.background = element_blank()) + fifty_states_inset_boxes()

cincuenta estados con recuadros insertados