A combination of choropleth made in ggplot and ggmap

Created choropleth using ggplot2. Here is the ggplot code

okc <- ggplot() + geom_polygon(data = mapdata, aes(x = long, y = lat, group = group, fill = B19013_001), color = "black", size = 0.5)+ scale_fill_distiller(palette = "Reds", labels = comma, breaks = pretty_breaks(n = 10), values = c(1,0)) + guides(fill = guide_legend(reverse = TRUE)) + theme_nothing(legend = TRUE) + ggtitle('Map of 40109') 

Here is sample data from mapdata:

  long lat order hole piece group id 1 -97.54285 35.51951 1 FALSE 1 40109100100.1 40109100100 2 -97.54282 35.51954 2 FALSE 1 40109100100.1 40109100100 3 -97.54280 35.51963 3 FALSE 1 40109100100.1 40109100100 4 -97.54276 35.51976 4 FALSE 1 40109100100.1 40109100100 5 -97.54270 35.51993 5 FALSE 1 40109100100.1 40109100100 6 -97.54266 35.52016 6 FALSE 1 40109100100.1 40109100100 NAME state county tract B19013_001 1 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 2 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 3 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 4 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 5 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 6 Census Tract 1001, Oklahoma County, Oklahoma 40 109 100100 33440 

He produced this plot.

Map 40109

I also created a road map using ggmap. Here is the code:

 map <- get_map(location = c(lon = mean(mapdata$lon), lat = mean(mapdata$lat)) , zoom = 10 , maptype = "roadmap" , color = "bw") p <- ggmap(map) + scale_x_continuous(limits = c(min(mapdata$lon), max(mapdata$lon)), expand = c(0, 0)) + scale_y_continuous(limits = c(min(mapdata$lat), max(mapdata$lat)), expand = c(0, 0)) p 

And here is the card that she produces.

street map

When I try to combine them, I get an error message. Here is the code that I use to combine them and the error:

 okc <- okc + p Error in p + o : non-numeric argument to binary operator In addition: Warning message: Incompatible methods ("+.gg", "Ops.data.frame") for "+" 

I am not sure why I am getting this error. Is it because the cards do not scale the same way? I could not figure out how else to scale ggmap other than using the very inaccurate scaling function. If anyone has any ideas on how to stack choropleth on top of ggmap, I will be very grateful.

Here the rest of the code recreates choropleth ggplot.

  library(acs) library(ggplot2) library(ggmap) library(UScensus2010) library(RColorBrewer) library(dplyr) library(scales) #http://api.census.gov/data/key_signup.html api.key.install(key="c369cd6ed053a84332caa62301eb8afe98bed825") # Load in Shape File (You'll need to download this file from the census) #ftp://ftp2.census.gov/geo/tiger/TIGER2013/TRACT/tl_2013_40_tract.zip ## load, subset shapefile geodat<-readShapePoly("insert shapefile here", proj4string=CRS('+proj=longlat +datum=NAD83')) geodat<-geodat[geodat$COUNTYFP==109,] ## fortify for ggplot digestion geodat.f<-fortify(geodat,region="GEOID") # American Community Survey Data: Median HH Income for OK Census Tracts ok.counties=geo.make(state="OK", county="Oklahoma", tract="*") ok.income<-acs.fetch(geography=ok.counties, table.number="B19013", endyear=2013) # Merge Data Sets geo_dat<-geography(ok.income) var_dat<-as.data.frame(estimate(ok.income)) acs_data<-cbind(geo_dat,var_dat) acs_data$id<- paste("40109", acs_data$tract, sep = "") ## from dplyr mapdata<-left_join(geodat.f,acs_data) okc <- ggplot() + geom_polygon(data = mapdata, aes(x = long, y = lat, group = group, fill = B19013_001), color = "black", size = 0.5)+ scale_fill_distiller(palette = "Reds", labels = comma, breaks = pretty_breaks(n = 10), values = c(1,0)) + guides(fill = guide_legend(reverse = TRUE)) + theme_nothing(legend = TRUE) + ggtitle('Map of OKC') 
+7
r ggplot2 ggmap choropleth
source share
1 answer

It really is much better done in the Flyer. It looks better aesthetically, as well as coding, more intuitive.

 library(leaflet) library(rgdal) library(RColorBrewer) pal <- colorNumeric("OrRd", domain = new$pct_minority_popn) leaflet(mapdata) %>% addTiles %>% addPolygons(stroke=T, fillOpacity=.5, smoothFactor=.5, color=~pal(B19013_001)) %>% addLegend("bottomright", pal=pal, values=~B19013_001, title="Legend Title", opacity=.8) 

You can change the bottom map by replacing the addTiles command with something like addProviderTiles ("CartoDB.Positron"). You can view other options and get more information about the flyer at: https://rstudio.imtqy.com/leaflet/basemaps.html

+3
source share

All Articles