Tạo một choropleth bằng ggplot2. Dưới đây là đoạn code ggplotKết hợp choropleth được thực hiện trong ggplot và 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')
Dưới đây là một mẫu của các dữ liệu từ 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
Nó tạo ra âm mưu này.
Tôi cũng đã tạo bản đồ đường bằng ggmap. Đây là mã:
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
Và đây là bản đồ mà nó tạo ra.
Khi tôi cố gắng kết hợp chúng mặc dù tôi nhận được một lỗi. Đây là mã tôi sử dụng để kết hợp chúng và lỗi:
okc <- okc + p
Error in p + o : non-numeric argument to binary operator
In addition: Warning message:
Incompatible methods ("+.gg", "Ops.data.frame") for "+"
Tôi không chắc tại sao tôi gặp phải lỗi này. Có phải vì các bản đồ không được thu nhỏ không? Tôi không thể tìm ra cách khác để mở rộng ggmap khác với việc sử dụng chức năng thu phóng rất không chính xác. Nếu bất kỳ ai có bất kỳ ý tưởng về làm thế nào để lớp choropleth trên đầu trang của ggmap tôi sẽ rất biết ơn.
Đây là phần còn lại của mã để tạo lại 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')
Với dữ liệu được cung cấp, tôi thực sự không thể làm được gì nhiều. Vì bạn muốn vẽ các đa giác trên đầu bản đồ, bạn muốn làm một cái gì đó như thế này: 'ggmap (map) + geom_polygon (dữ liệu = mapdata, aes (x = dài, y = lat, nhóm = nhóm, điền = B19013_001) , color = "black", size = 0.5) 'Tôi nghĩ bạn muốn cung cấp một lớp cơ sở, là một bản đồ, sử dụng' ggmap() ', sau đó bạn vẽ các đa giác lên trên nó. – jazzurro
@jazzurro Yeah, đó là chính xác những gì tôi đang cố gắng làm. Mã bạn cung cấp là một khởi đầu tốt nhưng nó ngăn xếp choropleth trên bản đồ đường. Có cách nào để thay đổi độ mờ đục của choropleth để bạn thực sự có thể thấy những gì bên dưới? –
Tôi hiểu. Trong trường hợp đó, bạn muốn sử dụng 'alpha' trong' geom_polygon() '. Bạn có thể làm; 'ggmap (bản đồ) + geom_polygon (dữ liệu = mapdata, aes (x = dài, y = lat, nhóm = nhóm, fill = B19013_001), color =" black ", size = 0.5, alpha = 0.5)'. Chơi với giá trị alpha (từ 0 đến 1) và xem giá trị nào cho bạn hình ảnh phù hợp. – jazzurro