2016-07-04 5 views
0

ggplot2を使用して米国とカナダの国勢調査マップを逆バインドしようとしています。マップ国勢調査:rbindはggplot2でRの空間オブジェクトを強化します

us <- readOGR(dsn = "00-raw/usmaps/us/", layer = "co99_d90") 
canada <- readOGR(dsn = "00-raw/gcd_000b11a_e/", layer = "canada") 

canada$id <- as.numeric(canada$id) 
us$id <- as.numeric(us$id) 

canada$id <- canada$id + length(unique(us$id)) 
na <- rbind(canada, us) 

p <- ggplot() + 
    geom_polygon(data = na, aes(x = long, y = lat, group = group, fill = pop), 
       color = "black", size = 0.25) + 
    theme_nothing(legend = TRUE) 

しかし、奇妙な行があります。

enter image description here

シェープファイルのソースは以下の通りである:

http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gcd_000b11a_e.zip

www2.census.gov/geo/tiger/PREVGENZ/co/co90shp/co99_d90_shp.zip

米国の郡とカナダの国勢調査部門を私の国境で表現したいので、シェイプファイルが本当に必要です。

+0

シェイプファイルのソースを追加できますか? – Alex

+0

あるいは、2つの一見無作為なシェイプファイルを使用するよりもはるかに最適な方法があるかもしれないので、実際に何を達成しようとしているのかを特定してください。 – hrbrmstr

答えて

0

私は両方のシェイプファイルを単純化し、個々のgeojsonファイルhereに入れました。

geom_map()を使用する場合は、強化データフレームにデータをバインドする必要はありません。あなたがConUSかすべての米国の州&の領土を必要とするかどうかは分かりませんので、私はdiffとAlaskaを分割しました。 YMMV。

私もあなたからのものがないので、私はいくつかのデータをシミュレートしました。

library(rgdal) 
library(rgeos) 
library(maptools) 
library(ggplot2) 
library(ggthemes) 
library(viridis) 

canada <- readOGR("canada.geojson", "OGRGeoJSON", 
        verbose=FALSE, stringsAsFactors=FALSE) 
usa <- readOGR("usacounties.geojson", "OGRGeoJSON", 
       verbose=FALSE, stringsAsFactors=FALSE) 

ca_map <- fortify(canada, region="CDUID") 
us_map <- fortify(usa, region="CO99_D90_I") 

set.seed(1492) 
ca_pop <- data.frame(id=unique(canada$CDUID), 
        val=sample(100000, length(unique(canada$CDUID))), 
        stringsAsFactors=FALSE) 
us_pop <- data.frame(id=unique(usa$CO99_D90_I), 
        val=sample(100000, length(unique(usa$CO99_D90_I))), 
        stringsAsFactors=FALSE) 

gg <- ggplot() 
gg <- gg + geom_map(data=ca_map, map=ca_map, 
        aes(long, lat, map_id=id), 
        size=0.1, fill=NA, color="#2b2b2b") 
gg <- gg + geom_map(data=ca_pop, map=ca_map, 
        aes(fill=val, map_id=id)) 
gg <- gg + geom_map(data=us_map, map=us_map, 
        aes(long, lat, map_id=id), 
        size=0.1, fill=NA, color="#2b2b2b") 
gg <- gg + geom_map(data=us_pop, map=us_map, 
        aes(fill=val, map_id=id)) 
gg <- gg + scale_fill_viridis(name="Population") 
gg <- gg + coord_map(xlim=c(-170, -55), ylim=c(23.2, 80)) 
gg <- gg + theme_map() 
gg 

enter image description here

私はあなたがあまりにも多くの情報を表示しようとしている99%確信しているが、我々は本当にあなたが何をしようとしているのか分かりません。あなたが米国の郡とカナダの国勢調査IDで人口を表示しようとしている場合、私はあなたがあまりにも多くの情報を表示しようとしていることを100%確信しています。

+0

すごくありがとう。 私はChettyらを複製しているグループの研究助手です。社会的モビリティに関する2014年の論文。最初のマップ上の母集団は生成されたサンプルのみでした。 –

関連する問題