Creato a choropleth utilizzando ggplot2. Ecco il codice ggplotCombinazione di coropleth creato in ggplot e ggmap
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')
Ecco un campione dei dati da 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
ha prodotto questa trama.
Ho anche creato una mappa stradale utilizzando ggmap. Ecco il codice:
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
Ed ecco la mappa che produce.
quando cerco di combinarli se ottengo un errore. Ecco il codice che uso per combinarli e l'errore:
okc <- okc + p
Error in p + o : non-numeric argument to binary operator
In addition: Warning message:
Incompatible methods ("+.gg", "Ops.data.frame") for "+"
Non sono sicuro del motivo per cui viene visualizzato questo errore. È perché le mappe non sono ridimensionate allo stesso modo? Non riuscivo a capire in che altro modo ridimensionare ggmap se non utilizzando la funzione di zoom molto imprecisa. Se qualcuno ha qualche idea su come stratificare la coropleth sopra la ggmap, sarò molto grato.
Ecco il resto del codice per ricreare il chgopleto 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')
Con i dati forniti, non posso davvero fare molto. Dato che vuoi disegnare poligoni su una mappa, devi fare qualcosa di simile a questo: 'ggmap (mappa) + geom_polygon (data = mapdata, aes (x = long, y = lat, gruppo = gruppo, riempimento = B19013_001) , color = "black", size = 0.5) 'Penso che si voglia fornire un livello base, che è una mappa, usando' ggmap() ', quindi si disegnano poligoni su di esso. – jazzurro
@jazzurro Sì, è esattamente quello che sto cercando di fare. Il codice che hai fornito è un buon inizio, ma impila il coropleto in cima alla mappa stradale. C'è un modo per cambiare l'opacità del coropleto in modo che tu possa effettivamente vedere cosa c'è sotto? –
Vedo. In tal caso, si desidera utilizzare 'alpha' in' geom_polygon() '. Tu puoi fare; 'ggmap (mappa) + geom_polygon (data = mapdata, aes (x = long, y = lat, gruppo = gruppo, riempimento = B19013_001), color =" nero ", dimensione = 0,5, alpha = 0,5)'. Gioca con il valore alfa (tra 0 e 1) e vedi quale valore ti dà l'immagine giusta. – jazzurro