Utworzono choropleth przy użyciu ggplot2. Oto kod ggplotŁączenie choropleth wykonane w ggplot i 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')
Oto próbka danych z rzecz firmy 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
Produkowany tej działki.
Stworzyłem również mapę jezdnia użyciu ggmap. Oto kod:
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
A oto mapa, którą produkuje.
Kiedy próbuję łączyć je, choć pojawia się błąd. Oto kod, którego używam, aby je połączyć, i błąd:
okc <- okc + p
Error in p + o : non-numeric argument to binary operator
In addition: Warning message:
Incompatible methods ("+.gg", "Ops.data.frame") for "+"
Nie jestem pewien, dlaczego otrzymuję ten błąd. Czy to dlatego, że mapy nie są skalowane tak samo? Nie mogłem wymyślić, jak inaczej skalować ggmap, poza użyciem bardzo niedokładnej funkcji zoomu. Jeśli ktoś ma jakieś pomysły na temat układania choropleth na szczycie ggmap, będę bardzo wdzięczny.
Oto reszta kodu do odtworzenia choropletu 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')
Z podanymi danymi, nie mogę zrobić naprawdę dużo. Ponieważ chcesz narysować wielokąty na górze mapy, chcesz zrobić coś takiego: 'ggmap (mapa) + geom_polygon (dane = dane mapy, aes (x = długie, y = lat, grupa = grupa, wypełnienie = B19013_001) , color = "black", size = 0.5) 'Myślę, że chcesz dostarczyć warstwę bazową, która jest mapą, używając' ggmap() ', a następnie narysuj na niej wielokąty. – jazzurro
@jazzurro Tak, właśnie to próbuję zrobić. Podany kod jest dobrym początkiem, ale układa choropleth na mapie drogi. Czy istnieje sposób na zmianę krycia kartogramu, aby można było zobaczyć, co jest pod spodem? –
Rozumiem. W takim przypadku chcesz użyć 'alpha' w' geom_polygon() '. Możesz to zrobić; 'ggmap (mapa) + geom_polygon (dane = dane mapy, aes (x = długie, y = lat, grupa = grupa, wypełnienie = B19013_001), kolor =" czarny ", rozmiar = 0,5, alfa = 0,5)'. Graj z wartością alfa (od 0 do 1) i zobacz, która wartość daje odpowiedni obraz. – jazzurro