我正在尝试使用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,因为我希望我的边界代表美国的县和加拿大的人口普查部门。
答案 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
我99%肯定你试图展示太多信息,但我们并不知道你想要做什么。如果你试图按照美国郡和加拿大人口普查的身份显示人口数量,那么我100%肯定你试图显示太多信息。