地图人口普查:rbind使用ggplot2强化R中的空间对象

时间:2016-07-04 22:23:12

标签: r dictionary ggplot2 census

我正在尝试使用ggplot2来修复美国和加拿大的人口普查地图。

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

shapefile的来源如下:

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,因为我希望我的边界代表美国的县和加拿大的人口普查部门。

1 个答案:

答案 0 :(得分:0)

我制作了两个shapefile的简化版本,并将它们放入单独的geojson文件here

如果使用geom_map(),则无需将数据绑定到强化数据框。我不知道你是否只需要ConUS或美国所有州和领土,所以我分裂了差异,包括阿拉斯加。 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%肯定你试图展示太多信息,但我们并不知道你想要做什么。如果你试图按照美国郡和加拿大人口普查的身份显示人口数量,那么我100%肯定你试图显示太多信息。