2016-07-04 68 views
0

我正在嘗試使用ggplot2對美國和加拿大人口普查地圖進行rbind。地圖人口普查: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

的shape文件的來源如下:

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

你可以添加shapefile的來源嗎? – Alex

+0

或者,也許可以確定你實際上正在嘗試完成什麼,因爲可能比使用兩個看起來隨機的形狀文件有更好的方法。 – hrbrmstr

回答

0

我製作了兩種形狀文件的簡化版本,並將它們放入單獨的幾何文件中here

如果您使用geom_map(),則無需將數據綁定到強化數據幀。我不知道你是否只需要ConUS或所有美國州&地區,所以我拆分差異幷包括阿拉斯加。因人而異。

我模擬了一些數據,因爲我們也沒有這樣的數據。

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 et al的一個研究助理。 2014年關於社會流動的文章。第一張地圖上的人口只是一個生成的樣本。 –