stat_sf_coordinates() 从 'sf' 对象中提取坐标,并将它们汇总为每个几何体的一对坐标(x 和 y)。当您将 sf 对象绘制为文本和标签等几何图形时,这很方便(因此 geom_sf_text() 和 geom_sf_label() 依赖于此)。
用法
stat_sf_coordinates(
  mapping = aes(),
  data = NULL,
  geom = "point",
  position = "identity",
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE,
  fun.geometry = NULL,
  ...
)
参数
- mapping
 - 
由
aes()创建的一组美学映射。如果指定且inherit.aes = TRUE(默认),它将与绘图顶层的默认映射组合。如果没有绘图映射,则必须提供mapping。 - data
 - 
该层要显示的数据。有以下三种选择:
如果默认为
NULL,则数据继承自ggplot()调用中指定的绘图数据。data.frame或其他对象将覆盖绘图数据。所有对象都将被强化以生成 DataFrame 。请参阅fortify()将为其创建变量。将使用单个参数(绘图数据)调用
function。返回值必须是data.frame,并将用作图层数据。可以从formula创建function(例如~ head(.x, 10))。 - geom
 - 
用于显示数据的几何对象,可以作为
ggprotoGeom子类,也可以作为命名去除geom_前缀的几何对象的字符串(例如"point"而不是"geom_point") - position
 - 
位置调整,可以是命名调整的字符串(例如
"jitter"使用position_jitter),也可以是调用位置调整函数的结果。如果需要更改调整设置,请使用后者。 - na.rm
 - 
如果
FALSE,则默认缺失值将被删除并带有警告。如果TRUE,缺失值将被静默删除。 - show.legend
 - 
合乎逻辑的。该层是否应该包含在图例中?
NA(默认值)包括是否映射了任何美学。FALSE从不包含,而TRUE始终包含。它也可以是一个命名的逻辑向量,以精细地选择要显示的美学。 - inherit.aes
 - 
如果
FALSE,则覆盖默认美学,而不是与它们组合。这对于定义数据和美观的辅助函数最有用,并且不应继承默认绘图规范的行为,例如borders()。 - fun.geometry
 - 
该函数接受
sfc对象并返回与输入长度相同的sfc_POINT。如果NULL,将使用function(x) sf::st_point_on_surface(sf::st_zm(x))。请注意,如果未投影数据,该函数可能会警告结果不正确,但您可以忽略此错误,除非您真正关心确切位置。 - ...
 - 
其他参数传递给
layer()。这些通常是美学,用于将美学设置为固定值,例如colour = "red"或size = 3。它们也可能是配对的 geom/stat 的参数。 
细节
sf 对象的坐标可以通过 sf::st_coordinates() 检索。但是,我们不能简单地使用 sf::st_coordinates(),因为虽然文本和标签只需要每个几何图形一个坐标,但它会为多边形或直线返回多个坐标。因此,需要执行以下两个步骤:
- 
通过
sf::st_centroid()或sf::st_point_on_surface()等函数为每个几何体选择一个点。 - 
通过
sf::st_coordinates()从点检索坐标。 
第一步,您可以通过 fun.geometry 使用任意函数。默认使用function(x) sf::st_point_on_surface(sf::st_zm(x)); sf::st_point_on_surface() 似乎比 sf::st_centroid() 更合适,因为标签和文本通常旨在放置在多边形或线条内。 sf::st_zm()需要事先删除Z和M维度,否则当几何体具有M维度时sf::st_point_on_surface()可能会失败。
计算变量
这些是由层的 'stat' 部分计算的,可以使用 delayed evaluation 访问。
- 
after_stat(x)
简单特征的 X 尺寸。 - 
after_stat(y)
简单特征的 Y 维度。 
例子
if (requireNamespace("sf", quietly = TRUE)) {
nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
ggplot(nc) +
  stat_sf_coordinates()
ggplot(nc) +
  geom_errorbarh(
    aes(geometry = geometry,
        xmin = after_stat(x) - 0.1,
        xmax = after_stat(x) + 0.1,
        y = after_stat(y),
        height = 0.04),
    stat = "sf_coordinates"
  )
}
#> Reading layer `nc' from data source 
#>   `/home/runner/work/_temp/Library/sf/shape/nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> Geodetic CRS:  NAD27
#> Warning: st_point_on_surface may not give correct results for longitude/latitude data
相关用法
- R ggplot2 stat_summary_2d 以二维形式进行分类和汇总(矩形和六边形)
 - R ggplot2 stat_summary 总结唯一/分箱 x 处的 y 值
 - R ggplot2 stat_ellipse 计算法行数据椭圆
 - R ggplot2 stat_identity 保留数据原样
 - R ggplot2 stat_unique 删除重复项
 - R ggplot2 stat_ecdf 计算经验累积分布
 - R ggplot2 scale_gradient 渐变色阶
 - R ggplot2 scale_shape 形状比例,又称字形
 - R ggplot2 scale_viridis 来自 viridisLite 的 Viridis 色标
 - R ggplot2 scale_grey 连续灰度色阶
 - R ggplot2 scale_linetype 线条图案的比例
 - R ggplot2 scale_discrete 离散数据的位置尺度
 - R ggplot2 scale_manual 创建您自己的离散尺度
 - R ggplot2 scale_colour_discrete 离散色阶
 - R ggplot2 scale_steps 分级渐变色标
 - R ggplot2 should_stop 在示例中用于说明何时应该发生错误。
 - R ggplot2 scale_size 面积或半径比例
 - R ggplot2 scale_date 日期/时间数据的位置刻度
 - R ggplot2 scale_continuous 连续数据的位置比例(x 和 y)
 - R ggplot2 scale_binned 用于对连续数据进行装箱的位置比例(x 和 y)
 - R ggplot2 sec_axis 指定辅助轴
 - R ggplot2 scale_alpha Alpha 透明度比例
 - R ggplot2 scale_colour_continuous 连续色标和分级色标
 - R ggplot2 scale_identity 使用不缩放的值
 - R ggplot2 scale_linewidth 线宽比例
 
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Extract coordinates from 'sf' objects。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
