我试图使用st_centroid函数在sf库中显示R中GIS多边形特征的标签。不幸的是,虽然head()函数似乎显示每个多边形具有与其相关的不同的x和y坐标,但在地图上的单个点(这显然是一个特定多边形的质心),所有标签都会被呈现重叠。我在这里做错什么了?
当前代码设置:
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))发布于 2021-11-25 15:16:22
您最好通过fun.geometry调用的geom_sf_text()参数来指定质心位置/以默认的方式指定sf::st_point_on_surface() -这是一个很好的默认,因为它确保标签没有放置在一个洞内,如果多边形有一个洞的话。
请考虑下面的示例,使用众所周知的、非常受欢迎的nc.shp shapefile,该文件随{sf}一起提供。
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)

https://stackoverflow.com/questions/70112951
复制相似问题