Matt
Matt

Reputation: 21

Custom choropleth map with states grouped into territories

I'm trying to create a choropleth map that basically groups states into sales territories. For example: Georgia, Florida, and Alabama would be treated as one territory called Southeast.

It seems like I should be able to use the existing state shapefile data from map_data("state") to create a new shapefile with these territories.

But I'm not exactly sure how to do this.


Thanks for the help guys. Let me try to add some code to explain.

library(ggplot2)
library(maps)
library(plyr)
library(grid)

#load us state map data
us_state_map = map_data("state");

#map each state to a division
us_state_map$division[us_state_map$region %in% c("connecticut", "maine", "massachusetts", "new hampshire", "rhode island", "vermont")] <- "D1"
us_state_map$division[us_state_map$region %in% c("new jersey","new york","puerto rico","virgin islands")] <- "D2"
us_state_map$division[us_state_map$region %in% c("delaware","district of columbia","maryland","pennsylvania","virginia","west virginia")] <- "D3"
us_state_map$division[us_state_map$region %in% c("alabama","florida","georgia","kentucky","mississippi","north carolina","south carolina","tennessee")] <- "D4"
us_state_map$division[us_state_map$region %in% c("illinois","indiana","michigan","minnesota","ohio","wisconsin")] <- "D5"
us_state_map$division[us_state_map$region %in% c("arkansas","louisiana","new mexico","oklahoma","texas")] <- "D6"
us_state_map$division[us_state_map$region %in% c("iowa","kansas","missouri","nebraska")] <- "D7"
us_state_map$division[us_state_map$region %in% c("colorado","montana","north dakota","south dakota","utah","wyoming")] <- "D8"
us_state_map$division[us_state_map$region %in% c("arizona","california","hawaii","nevada")] <- "D9"
us_state_map$division[us_state_map$region %in% c("alaska","idaho","oregon","washington")] <- "D10"

#create a dummy variable that counts the number of states in each division
divisions.subtotal <- ddply(us_state_map, .(division), summarize, NumberOfStates=length(unique(region)))

#merge our dummy data back into the map data table
us_state_map.mod <- merge(x=us_state_map, y=divisions.subtotal, all.x=TRUE, by.x="division", by.y="division")
us_state_map.mod = arrange(us_state_map.mod, order);
us_state_map.mod$division = as.factor(us_state_map.mod$division)

#plot a map of each division
map <- ggplot() 
map = map + geom_polygon(data=us_state_map.mod, aes(x=long, y=lat, group=group, fill=division))
map

#using these division boundaries, how do i plot the NumberOfStates variable for each Division

Upvotes: 2

Views: 1360

Answers (1)

Brian
Brian

Reputation: 31

Not sure if you still need an answer or not, but I would suggest using the maps library:

map("usa")

map("state",regions=c("connecticut", "maine", "massachusetts", 
    "new hampshire", "rhode island","vermont"),interior=F,boundary=T,add=T)

Then using col= specifications to shade different levels for each region. It's a little tedious, but it does create the regions.

Upvotes: 3

Related Questions