mid_range <- function(x) mean(range(x, na.rm = TRUE)) centres <- ddply(county_df, c("state", "county"), summarise, lat = mid_range(lat), long = mid_range(long) ) bubbles <- merge(centres, unemp, by = c("state", "county")) ggplot(bubbles, aes(long, lat)) + geom_polygon(aes(group = group), data = state_df, colour = "white", fill = NA) + geom_point(aes(size = rate), alpha = 1/2) + scale_area(to = c(0.5, 3), breaks = c(5, 10, 20, 30)) ggplot(bubbles, aes(long, lat)) + geom_polygon(aes(group = group), data = state_df, colour = "white", fill = NA) + geom_point(aes(color = rate_d)) + scale_colour_brewer(pal = "PuRd")