首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >st_centroid在同一点上呈现所有标签

st_centroid在同一点上呈现所有标签
EN

Stack Overflow用户
提问于 2021-11-25 14:37:20
回答 1查看 258关注 0票数 0

我试图使用st_centroid函数在sf库中显示R中GIS多边形特征的标签。不幸的是,虽然head()函数似乎显示每个多边形具有与其相关的不同的x和y坐标,但在地图上的单个点(这显然是一个特定多边形的质心),所有标签都会被呈现重叠。我在这里做错什么了?

当前代码设置:

代码语言:javascript
复制
library("ggplot2")
library("sf")

sf::sf_use_s2(FALSE) #makes centroids not break

world <- st_read("C:/prgrm/gis/source/10m_land_and_islands.shp")
prov <- st_read("C:/prgrm/gis/edited ncm/ncm_provinces.shp")
prov <- cbind(prov, st_coordinates(st_centroid(prov))) #attaches centroids to 'prov' dataset

head(prov)

ggplot(data = world) + 
  geom_sf() + 
  geom_sf(data=prov, aes(fill="blue")) +
  geom_text(data=prov, aes(X,Y, label=provname_r), size=5) +
  coord_sf(xlim=c(-2000000,1000000),ylim=c(-1500000, 3000000), crs=st_crs(3310))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-25 15:16:22

您最好通过fun.geometry调用的geom_sf_text()参数来指定质心位置/以默认的方式指定sf::st_point_on_surface() -这是一个很好的默认,因为它确保标签没有放置在一个洞内,如果多边形有一个洞的话。

请考虑下面的示例,使用众所周知的、非常受欢迎的nc.shp shapefile,该文件随{sf}一起提供。

代码语言:javascript
复制
library(sf)
library(ggplot2)

# in place of your world dataset
shape <- st_read(system.file("shape/nc.shp", package="sf"))   # included with sf package

# in place of your prov dataset
ashe <- shape[1, ]

ggplot(data = shape) +
  geom_sf() +
  geom_sf(data = ashe, fill = "blue") +
  geom_sf_text(data = ashe, 
               aes(label = NAME), 
               color = "red",
               fun.geometry = st_centroid)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70112951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档