2016-07-04 17 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

나는 국경이 미국의 카운티를 대표하고 캐나다의 인구 조사 부문을 대표하기를 원하기 때문에 그 shapefile을 정말로 필요로합니다.

+0

셰이프 파일의 원본을 추가 할 수 있습니까? – Alex

+0

또는 아마도 겉으로보기에 무작위 인 두 개의 쉐이프 파일을 사용하는 것보다 훨씬 더 최적의 방법이 될 수 있으므로 실제로 수행하려는 것을 식별하십시오. – hrbrmstr

답변

0

두 셰이프 파일의 단순화 된 버전을 만들고 각각의 geojson 파일 here에 넣었습니다.

geom_map()을 사용하면 강화 된 데이터 프레임에 데이터를 바인딩 할 필요가 없습니다. ConUS 또는 모든 미국 주 & 영토가 필요한지 전혀 알 수 없으므로 diff를 분리하고 알래스카를 포함 시켰습니다. YMMV.

나는 우리도 당신에게서 그걸 가지고 있지 않기 때문에 나는 약간의 데이터를 시뮬레이션했다.

enter image description here

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 

난 당신이 너무 많은 정보를 표시하려는 99 % 확신하지만 우리는 정말 당신이 뭘하려는 건지 모르겠어요. 미국 카운티와 캐나다 인구 조사 ID로 인구를 표시하려고 시도하는 경우 나는 너무 많은 정보를 표시하려고합니다.

+0

와우, 정말 고마워. 나는 Chetty et al.을 복제하는 그룹의 연구 조교입니다. 사회적 이동성에 관한 2014 년 논문 첫 번째 맵의 모집단은 생성 된 샘플이었습니다. –