Combining choropleth made in ggplot and ggmap
使用ggplot2创建一个Choropleth。这是ggplot代码
1 2 3 4 5 6 7 8 | 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') |
这是来自mapdata的数据示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
它产生了这个情节。
我还使用ggmap创建了一个道路地图。这是代码:
1 2 3 4 5 6 7 8 | 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 |
这是它生成的地图。
当我尝试合并它们时,尽管出现错误。这是我用来组合它们和错误的代码:
1 2 3 4 5 | okc <- okc + p Error in p + o : non-numeric argument to binary operator In addition: Warning message: Incompatible methods ("+.gg","Ops.data.frame") for"+" |
我不确定为什么会出现此错误。是否因为地图的缩放比例不同?除了使用非常不精确的缩放功能外,我不知道如何缩放ggmap。
如果有人对如何在ggmap上叠加弦乐有任何想法,我将非常感激。
这是其余的代码,用于重新创建ggplot Choropleth。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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') |
实际上,这在Leaflet中要好得多。它在美学上看起来更好,并且在代码方面也更直观。
1 2 3 4 5 6 7 8 9 10 | 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) |
您可以通过将addTiles命令替换为addProviderTiles(" CartoDB.Positron")之类的内容来更改底部地图。您可以在以下网址查看有关Leaflet的其余选项和更多信息:https://rstudio.github.io/leaflet/basemaps.html