geom_sf 映射 points/shapes
geom_sf mapping points/shapes
我正在使用 Tigris 包下载带有代码的形状文件,
options(tigris_class = "SF")
虽然我可以轻松映射多边形
ggplot(data=zctas) +
geom_sf(aes())
我正在努力创建一个 marker/point 而不是填充的多边形(例如,一个形状 -- 就像 zctas 中的一个圆圈),因为我从底格里斯拉下来的形状文件没有a lat/long 用于 x 和 y AES 映射。形状文件有一个 "geometry" 列,我想知道我是否可以使用它?
文档在这里,https://ggplot2.tidyverse.org/reference/ggsf.html
好像是表示geom_sf可以用go create points? (我猜是在使用 zctas 的多边形的质心?)但是我没能找到一个例子?
感谢任何资源来识别从这个 Tigris 生成的形状文件映射点的代码,和/或提示 and/or 替代方法。
如果我正确理解了您要实现的目标,您可能只需要使用 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
您正在寻找stat_sf_coordinates()
,描述here.
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 创建
关于最后一个例子的 aes()
调用中的 geometry = geometry
语句的评论:geom_sf()
和 stat_sf_coordinates()
都将自动映射几何列,如果他们找到数据集中的一个。但是,geom_point()
不知道几何列,因此不会自动映射,因此我们必须手动映射。
我正在使用 Tigris 包下载带有代码的形状文件,
options(tigris_class = "SF")
虽然我可以轻松映射多边形
ggplot(data=zctas) +
geom_sf(aes())
我正在努力创建一个 marker/point 而不是填充的多边形(例如,一个形状 -- 就像 zctas 中的一个圆圈),因为我从底格里斯拉下来的形状文件没有a lat/long 用于 x 和 y AES 映射。形状文件有一个 "geometry" 列,我想知道我是否可以使用它?
文档在这里,https://ggplot2.tidyverse.org/reference/ggsf.html
好像是表示geom_sf可以用go create points? (我猜是在使用 zctas 的多边形的质心?)但是我没能找到一个例子? 感谢任何资源来识别从这个 Tigris 生成的形状文件映射点的代码,和/或提示 and/or 替代方法。
如果我正确理解了您要实现的目标,您可能只需要使用 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
您正在寻找stat_sf_coordinates()
,描述here.
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 创建关于最后一个例子的 aes()
调用中的 geometry = geometry
语句的评论:geom_sf()
和 stat_sf_coordinates()
都将自动映射几何列,如果他们找到数据集中的一个。但是,geom_point()
不知道几何列,因此不会自动映射,因此我们必须手动映射。