我正在使用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生成的形状文件中的点的代码,以及提示和/或替代方法。
答案 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