• 13
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

Plotting color map with zip codes in R or Python

I have some US demographic and firmographic data.
I would like to plot zipcode areas in a state or a smaller region (e.g. city). Each area would be annotated by color and/or text specific to that area. The output would be similar to http://maps.huge.info/ but a) with annotated text; b) pdf output; c) scriptable in R or Python.

Is there any package and code that allows me to do this?

I am assuming you want static maps.

alt text
(source: eduardoleoni.com)

1) Get the shapefiles of the zip boundaries and state boundaries at census.gov:

2) Use the plot.heat function I posted in this SO question.

For example (assumes you have the maryland shapefiles in the map subdirectory):

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()
  • 38
Reply Report
    • Do you mind explaining how I can map values from a csv file that has a zip code column and some other data columns to use this (apologies if the answer is obvious, but I don't really know R at all)? Specifically, I am having trouble figuring out what I should put for zip.map@data$noise <- rnorm(nrow(zip.map@data)) labelpos <- data.frame(do.call(rbind, lapply(zip.map@polygons, function(x) x@labpt))) and zip.map@data <- data.frame(zip.map@data, labelpos)

There are many ways to do this in R (see the spatial view); many of these depend on the "maps" package.

  • 10
Reply Report

There is a rich and sophisticated series of packages in R to plot, do analysis, and other functions related to GIS. One place to get started is the CRAN task view on Spatial Data: This is a complex and sometimes arcane world, and takes some work to understand.

If you are looking for a free, very functional mapping application, may I suggest:

MapWindow ( mapwindow.com)

  • 1
Reply Report
      • 1
    • I could not find anything in that CRAN view that would help me visualize zip code statistics on a map. The closest I got was the package muRL.

Daniel Levine at TechCrunch Trends has done nice things with the maps package in R. He has code available on his site, too.

Paul's suggestion of looking into Processing - which Ben Fry used to make zipdecode - is also a good one, if you're up for learning a (Java-like) new language.

  • 1
Reply Report
    • thanks Matt, yes the trends maps are zip code level, but instead of shading zipcode areas, I actually mapped the zipcodes to lat/long coords. Anyone is welcome to the code though.

Depending on your application, a long way around might be to use something like this:

http://googlemapsmania.blogspot.com/2006/07/new-google-maps-us-zip-code-mashups.html

To map your data. If that wasn't quite what you wanted, you can get raw zip code shapefiles from census.gov and do it manually, which is quite a pain.

Also, if you haven't seen it, this is a neat way to interact with similar data, and might offer some pointers:

http://benfry.com/zipdecode/

  • 0
Reply Report
      • 1
    • nice too, but these are visualizations of zip codes locations/boundaries. I am looking for a flexible way in R or Python to generate maps with custom-colored or text-annotated zip regions.

Check out this excellent online visualization tool by IBM http://manyeyes.alphaworks.ibm.com/manyeyes/

EDIT FYI, ManyEyes uses the Prefuse visualization toolkit for some of its viz. Even though it is a java-based framework, they also provide a Flash/ActionScript tool for the web.

  • 0
Reply Report
      • 1
    • nice, but manyeyes doesn't answer my question. I think it's very different from gapminder. Wattenberg is a visualization guy, Rosling is a social scientist, and the different approach shows.

Trending Tags