首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中创建How代码边界

如何在R中创建How代码边界
EN

Stack Overflow用户
提问于 2018-07-06 13:14:31
回答 1查看 3.4K关注 0票数 7

我试图创建一个地图,其名称为“社区”,显示多个邮政编码的边界。我拥有的数据类似于下面的数据。其中变量是社区的名称,数字是对应的邮政编码。

代码语言:javascript
复制
Tooele       <- c('84074','84029')
NEUtahCo     <- c('84003', '84004', '84042', '84062')
NWUtahCounty <- c('84005','84013','84043','84045')

我能绘制出我想要使用的整个区域的地图

代码语言:javascript
复制
ggmap(get_map(location = c(lon=-111.9, lat= 40.7), zoom = 9))

附上一张我想要的照片。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-06 14:33:31

你已经有了一个不错的基础,因为你已经弄清楚了形状文件和它如何匹配你想要展示的拉链。简单特性(sf)使这非常容易,就像全新的ggplot2 v3.0.0一样,它有geom_sf来绘制sf对象。

我不确定不同地区(县)的名字?你所拥有的是很重要的,所以我把它们都扔进了小圆顶里,并把它们绑定到一个小提线杆上,utah_zipstigris还添加了sf支持,所以如果设置class = "sf",就会得到一个sf对象。为了保持简单,我只是取出您需要的列,并简化其中一个名称。

代码语言:javascript
复制
library(tidyverse)
library(tigris)
library(ggmap)

Tooele       <- c('84074','84029')
NEUtahCo     <- c('84003', '84004', '84042', '84062')
NWUtahCounty <- c('84005','84013','84043','84045')
utah_zips <- bind_rows(
  tibble(area = "Tooele", zip = Tooele),
  tibble(area = "NEUtahCo", zip = NEUtahCo),
  tibble(area = "NWUtahCounty", zip = NWUtahCounty)
)

zips_sf <- zctas(cb = T, starts_with = "84", class = "sf") %>%
  select(zip = ZCTA5CE10, geometry)

head(zips_sf)
#> Simple feature collection with 6 features and 1 field
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -114.0504 ymin: 37.60461 xmax: -109.0485 ymax: 41.79228
#> epsg (SRID):    4269
#> proj4string:    +proj=longlat +datum=NAD83 +no_defs
#>       zip                       geometry
#> 37  84023 MULTIPOLYGON (((-109.5799 4...
#> 270 84631 MULTIPOLYGON (((-112.5315 3...
#> 271 84334 MULTIPOLYGON (((-112.1608 4...
#> 272 84714 MULTIPOLYGON (((-113.93 37....
#> 705 84728 MULTIPOLYGON (((-114.0495 3...
#> 706 84083 MULTIPOLYGON (((-114.0437 4...

然后,您可以为您需要的zip过滤sf --因为有其他信息(县名),您可以使用一个联接来获取一个sf数据框架中的所有内容:

代码语言:javascript
复制
utah_sf <- zips_sf %>%
  inner_join(utah_zips, by = "zip")
head(utah_sf)
#> Simple feature collection with 6 features and 2 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -113.1234 ymin: 40.21758 xmax: -111.5677 ymax: 40.87196
#> epsg (SRID):    4269
#> proj4string:    +proj=longlat +datum=NAD83 +no_defs
#>     zip         area                       geometry
#> 1 84029       Tooele MULTIPOLYGON (((-112.6292 4...
#> 2 84003     NEUtahCo MULTIPOLYGON (((-111.8497 4...
#> 3 84074       Tooele MULTIPOLYGON (((-112.4191 4...
#> 4 84004     NEUtahCo MULTIPOLYGON (((-111.8223 4...
#> 5 84062     NEUtahCo MULTIPOLYGON (((-111.7734 4...
#> 6 84013 NWUtahCounty MULTIPOLYGON (((-112.1564 4...

您已经了解了基本地图,而且由于ggmap生成ggplot对象,所以您只需在geom_sf层上添加即可。诀窍是确保声明正在使用的数据,将其设置为不从ggmap继承aes,并关闭coord_sf中的计算公式。

代码语言:javascript
复制
basemap <- get_map(location = c(lon=-111.9, lat= 40.7), zoom = 9)

ggmap(basemap) +
  geom_sf(aes(fill = zip), data = utah_sf, inherit.aes = F, size = 0, alpha = 0.6) +
  coord_sf(ndiscr = F) +
  theme(legend.position = "none")

您可能需要调整基本地图的位置,因为它切断了一个拉链。一种方法是使用st_bbox获取utah_sf的边框,然后使用它获取基本地图。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51211239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档