Trazado de mapa de colores con códigos postales en R o Python
Pregunta
Tengo algunos datos demográficos y demográficos de los Estados Unidos.
Me gustaría trazar áreas de código postal en un estado o una región más pequeña (por ejemplo, ciudad). Cada área se anotaría por color y / o texto específico de esa área. El resultado sería similar a http://maps.huge.info/ pero a) con texto anotado; b) salida en pdf; c) programable en R o Python.
¿Hay algún paquete y código que me permita hacer esto?
Solución
Supongo que quieres mapas estáticos.
(fuente: eduardoleoni.com )
1) Obtenga los shapefiles de los zip límites y < a href = "http://www.census.gov/geo/www/cob/st2000.html" rel = "nofollow noreferrer"> límites de estado en census.gov:
2) Use la función plot.heat que publiqué en esta pregunta SO .
Por ejemplo (se supone que tiene los archivos de forma de Maryland en el subdirectorio del mapa):
library(maptools)
##substitute your shapefiles here
state.map <- readShapeSpatial("maps/st24_d00.shp")
zip.map <- readShapeSpatial("maps/zt24_d00.shp")
## this is the variable we will be plotting
zip.map@data$noise <- rnorm(nrow(zip.map@data))
## put the lab point x y locations of the zip codes in the data frame for easy retrieval
labelpos <- data.frame(do.call(rbind, lapply(zip.map@polygons, function(x) x@labpt)))
names(labelpos) <- c("x","y")
zip.map@data <- data.frame(zip.map@data, labelpos)
## plot it
png(file="map.png")
## plot colors
plot.heat(zip.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
## plot text
with(zip.map@data[sample(1:nrow(zip.map@data), 10),] , text(x,y,NAME))
dev.off()
Otros consejos
Hay muchas maneras de hacer esto en R (consulte la vista espacial ); muchos de estos dependen de los " mapas " paquete .
-
Echa un vistazo a este buen ejemplo de las elecciones estadounidenses de 2004 . Se ve así:
-
Aquí hay un ejemplo un poco feo de un modelo que usa el " maps " ; paquete con "retícula".
- Andrew Gelman hizo algunas tramas muy bonitas como esta. Consulte, por ejemplo, esta publicación de blog en estados rojos / estados azules y este seguimiento publicar .
-
Aquí hay un ejemplo muy simple usando el " gmaps " ; paquete , que muestra un mapa de arrestos por estado para arrestos por 100,000 por asesinato:
require(gmaps) data(USArrests) attach(USArrests) grid.newpage() grid.frame(name="map") grid.pack("map",USALevelPlot(states=rownames(USArrests),levels=Murder,col.fun=reds),height=unit(1,'null')) grid.pack("map",gradientLegendGrob(at=quantile(Murder),col.fun=reds),side="bottom",height=unit(.2,'npc')) detach(USArrests)
Alguien puede tener algo más directo para usted, pero encontré 'Data Mashups in R' de O'Reilly muy interesante ... en parte, es un mapeo espacial de las subastas de ejecuciones hipotecarias de viviendas.
En Python, puede usar archivos de forma del censo de EE. UU. junto con el paquete basemap
. Aquí hay un ejemplo de completando estados según la población.
Hay una serie rica y sofisticada de paquetes en R para trazar, hacer análisis y otras funciones relacionadas con SIG. Un lugar para comenzar es la vista de tareas CRAN en Datos espaciales : Este es un mundo complejo y a veces arcano, y requiere un poco de trabajo para entenderlo.
Si está buscando una aplicación de mapeo gratuita y muy funcional, le sugiero:
MapWindow (mapwindow.com)
Daniel Levine en TechCrunch Trends ha hecho cosas buenas con el paquete maps
en R. También tiene código disponible en su sitio.
La sugerencia de Paul de investigar Procesamiento, que Ben Fry solía hacer código postal, también es buena, si estás dispuesto a aprender un nuevo lenguaje (similar a Java).
Dependiendo de su aplicación, un largo camino podría ser usar algo como esto:
http: // googlemapsmania .blogspot.com / 2006/07 / new-google-maps-us-zip-code-mashups.html
Para mapear sus datos. Si eso no era exactamente lo que quería, puede obtener archivos de forma de código postal sin procesar de census.gov y hacerlo manualmente, lo cual es bastante doloroso.
Además, si no lo ha visto, esta es una buena forma de interactuar con datos similares y podría ofrecer algunos consejos:
Vea esta excelente herramienta de visualización en línea de IBM http://manyeyes.alphaworks.ibm.com/manyeyes/
EDITAR FYI, ManyEyes utiliza el Kit de herramientas de visualización de prefusiones para algunos de sus verbigracia. Aunque es un marco basado en Java, también proporcionan una herramienta Flash / ActionScript para la web.