-1

我正在尝试使用 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)

但是有一些奇怪的线。

在此处输入图像描述

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

4

1 回答 1

0

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

如果您使用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

在此处输入图像描述

我 99% 确定您试图显示太多信息,但我们并不真正知道您要做什么。如果您试图按美国县和加拿大人口普查 ID 显示人口,那么我 100% 确定您试图显示太多信息。

于 2016-07-05T01:14:45.863 回答