2015-10-16 18 views
7

ggplot2を使用してchoroplethを作成しました。ここでggplotコードggplotとggmapで作成されたchoroplethの組み合わせ

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

はここで地図データからのデータのサンプルですです:

 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 

それはこのプロットを生成します。

Map of 40109

私もggmapを使用して道路マップを作成しました。コードは次のとおりです。

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 

ここにコードがあります。

street map

私はエラーを取得するのに、それらを組み合わせるしようとします。

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をどのように拡大するべきかを知ることができませんでした。 もし誰かがgormapの上にchoroplethを重ねる方法についてのアイデアがあれば、私はとても感謝しています。

ggplot choroplethを再作成するコードの残りの部分は次のとおりです。

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

で見ることができます。私は本当に多くのことをすることはできません。マップの上にポリゴンを描きたいので、 'ggmap(map)+ geom_polygon(data = mapdata、aes(x = long、y = lat、group = group、fill = B19013_001) 、color = "black"、size = 0.5) 'ggmap()を使ってマップであるベースレイヤーを提供したいと思って、その上にポリゴンを描画します。 – jazzurro

+0

@ジャズロロええ、それはまさに私がやろうとしていることです。あなたが提供したコードは良いスタートですが、道路地図の上に複数のコードを積み重ねています。あなたが実際に何が下にあるかを見ることができるように、コレオスプラッシュの不透明度を変更する方法はありますか? –

+1

私は参照してください。その場合、 'geom_polygon()'に 'alpha'を使いたいとします。できるよ; (データ= mapdata、aes(x = long、y = lat、group = group、fill = B19013_001)、color = "black"、size = 0.5、alpha = 0.5) '。アルファ値(0と1の間)で再生し、どの値が正しいイメージを与えるかを確認します。 – jazzurro

答えて

3

これはリーフレットで実際にはるかに優れています。審美的に見栄えがよく、さらに直感的にコードすることも賢明です。

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) 

あなたはaddProviderTiles(「CartoDB.Positron」)のようなものでaddTilesコマンドを置き換えることにより、下のマップを変更することができます。残りのオプションとチラシの詳細は、https://rstudio.github.io/leaflet/basemaps.html

関連する問題