2015-10-16 20 views
7

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.

Map of 40109

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.

street map

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') 
+3

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

+0

@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? –

+1

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

Trả lời

3

Điều này thực sự được thực hiện tốt hơn trong Leaflet. Nó trông tốt hơn về mặt thẩm mỹ và cũng mã khôn ngoan nó trực quan hơn.

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) 

Bạn có thể thay đổi bản đồ dưới cùng bằng cách thay thế lệnh addTiles bằng một cái gì đó như addProviderTiles ("CartoDB.Positron"). Bạn có thể xem phần còn lại của các tùy chọn và thông tin khác về tờ rơi tại: https://rstudio.github.io/leaflet/basemaps.html

Các vấn đề liên quan