2011-12-16 15 views
8

Me gustaría crear un mapa de EE. UU. (Quizás un mapa de calor) para mostrar la frecuencia de una determinada característica entre estados. No estoy seguro de qué paquete usar o si mis datos están en la forma correcta. Mis datos se encuentra en la mesa de tfCrear un mapa de calor de EE. UU. Con abreviaturas de estado y frecuencia característica en R

tf 
AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2 

En su mayor parte, mis abreviaturas son los Estados Unidos (aparte de unos pocos casos canadienses). ¿Cuál es el mejor enfoque sugerido para mostrar gráficamente esto en un mapa?

Ahora, ¿cómo obtengo la granularidad de menos de 50 por color?

enter image description here

+1

[MapTools] (http://cran.r-project.org/web/packages/maptools /index.html) ('? maptools') y [maps] (http://cran.r-project.org/web/packages/maps/index.html) ('? maps') serán un buen punto de partida . También puede encontrar útil la [vista de tareas espaciales] (http://cran.r-project.org/web/views/Spatial.html). – Seb

+2

duplicado posible de [desempleo a nivel estatal en R] (http://stackoverflow.com/questions/5385713/state-level-unemployment-in-r) –

Respuesta

7

dos paquetes: mapas, ggplot2. Hay un excelente ejemplo a:? map_data()

sólo para empezar con:

tf= structure(list(state = structure(1:14, .Label = c("AK", "AL", 
"AR", "AZ", "CA", "CO", "CT", "DE", "FL", "GA", "IA", "IL", "IN", 
"KS"), class = "factor"), num = c(21L, 31L, 12L, 56L, 316L, 53L, 
31L, 7L, 335L, 63L, 42L, 73L, 40L, 2L), region = structure(c(2L, 
1L, 4L, 3L, 5L, 6L, 7L, 8L, 9L, 10L, 13L, 11L, 12L, 14L), .Label = c("alabama", 
"alaska", "arizona", "arkansas", "california", "colorado", "connecticut", 
"delaware", "florida", "georgia", "illinois", "indiana", "iowa", 
"kansas"), class = "factor")), .Names = c("state", "num", "region" 
), class = "data.frame", row.names = c(NA, -14L)) 

require(maps);require(ggplot2) 

states <- map_data("state") 
tfmerged <- merge(states, tf, sort = FALSE, by = "region") 
tfmerged <- tfmerged[order(tfmerged$order), ] 
qplot(long, lat, data = tfmerged, group = group, fill = num, 
geom="polygon") 

Luego llene los restos de la información estados.

+1

¿Entonces solo quiero agregar una L a mis datos numéricos? – megv

+0

@megv, no es necesario agregar una L, solo agregué eso para mostrar los datos que utilicé. Lo que podría necesitar agregar es el nombre de los estados, de modo que coincida con los estados $ region para que la fusión pueda funcionar. – aatrujillob

+0

Como ya tengo una tabla con abreviatura de estado y recuentos, ¿puedo simplemente insertar eso directamente en la estructura? Lo siento ... soy un poco nuevo en esto. – megv

7

Otro enfoque con spplot:

library(maps) 
library(maptools) 
library(sp) 

Primera leer los datos y agregar una columna con los nombres de los estados:

txt <- "AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2" 

dat <- stack(read.table(text = txt, header = TRUE)) 
names(dat)[2] <-'state.abb' 
dat$states <- tolower(state.name[match(dat$state.abb, state.abb)]) 

A continuación, se obtiene el mapa y convertirlo en un SpatialPolygons:

mapUSA <- map('state', fill = TRUE, plot = FALSE) 
nms <- sapply(strsplit(mapUSA$names, ':'), function(x)x[1]) 
USApolygons <- map2SpatialPolygons(mapUSA, IDs = nms, CRS('+proj=longlat')) 

Y ahora usted agrega la información para m sus datos:

idx <- match(unique(nms), dat$states) 
dat2 <- data.frame(value = dat$value[idx], state = unique(nms)) 
row.names(dat2) <- unique(nms) 

USAsp <- SpatialPolygonsDataFrame(USApolygons, data = dat2) 

Finalmente se traza que: Imagen

spplot(USAsp['value']) 

Agregado enter image description here

+0

¿Se puede agregar una imagen del resultado? –

+0

¿Hay algún método para agregar Hawaii y Alaska a este mapa? – marc

+0

Sí, pero debe usar un mapa diferente. Por ejemplo, 'mapUSA <- map ('world2', 'USA', fill = TRUE, plot = FALSE)'. –

Cuestiones relacionadas