geom_sf映射点/形状

时间:2019-11-03 01:14:59

标签: r ggplot2 geospatial sf tigris

我正在使用Tigris软件包下载带有代码的形状文件

options(tigris_class = "SF") 

虽然我可以轻松地映射多边形

ggplot(data=zctas) +
  geom_sf(aes())

我正在努力创建标记/点而不是填充的多边形(例如,形状-如zctas中的圆形),因为我从底格里斯河下拉的形状文件没有纬度/经度用于x和y AES映射。形状文件具有“几何”列,我想知道是否可以使用它?

此处的文档,https://ggplot2.tidyverse.org/reference/ggsf.html

似乎表明geom_sf可以用来创建点了吗? (我猜是在使用zctas多边形的质心吗?)但是我找不到示例吗? 感谢任何资源来标识可映射此Tigris生成的形状文件中的点的代码,以及提示和/或替代方法。

2 个答案:

答案 0 :(得分:5)

您正在寻找here.所述的stat_sf_coordinates()

library(ggplot2)

nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
#> Reading layer `nc' from data source `/Library/Frameworks/R.framework/Versions/3.6/Resources/library/sf/shape/nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> epsg (SRID):    4267
#> proj4string:    +proj=longlat +datum=NAD27 +no_defs

ggplot(nc) +
  geom_sf()

ggplot(nc) +
  geom_sf() +
  stat_sf_coordinates()
#> Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
#> not give correct results for longitude/latitude data

ggplot(nc) +
  geom_sf() +
  geom_point(
    aes(color = SID74, size = AREA, geometry = geometry),
    stat = "sf_coordinates"
  ) +
  scale_color_viridis_c(option = "C") +
  theme(legend.position = "bottom")
#> Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may
#> not give correct results for longitude/latitude data

reprex package(v0.3.0)于2019-11-03创建

在上一个示例的geometry = geometry调用中对aes()语句的一条评论:geom_sf()stat_sf_coordinates()都会在几何列中自动映射一个几何列数据集。但是,geom_point()不了解几何列,因此不会自动映射,因此我们必须手动进行映射。

答案 1 :(得分:4)

如果我正确理解了您要实现的目标,则可能只需要使用st_centroid()函数将数据转换为点,就可以使用最基本的方法,例如:

ggplot(data=st_centroid(zctas)) +
  geom_sf()

或者也许:

ggplot(data=st_centroid(st_geometry(zctas))) +
  geom_sf()

有关更多详细信息和示例,请参阅: https://r-spatial.github.io/sf/articles/sf5.html