当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R ggplot2 stat_sf_coordinates 从“sf”对象中提取坐标


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

用于显示数据的几何对象,可以作为 ggproto Geom 子类,也可以作为命名去除 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(),因为虽然文本和标签只需要每个几何图形一个坐标,但它会为多边形或直线返回多个坐标。因此,需要执行以下两个步骤:

  1. 通过 sf::st_centroid()sf::st_point_on_surface() 等函数为每个几何体选择一个点。

  2. 通过 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


相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Extract coordinates from 'sf' objects。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。