st_centroid 在同一点上呈现所有标签
st_centroid renders all labels on the same point
我正在尝试使用 sf
库中的 st_centroid
函数在 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))
通过 geom_sf_text()
调用的 fun.geometry
参数指定质心位置可能会更好 / 顺便说一下,默认值为 sf::st_point_on_surface()
- 这是一个很好的默认值如果多边形有一个洞,请确保标签没有放在洞内。
考虑这个例子,使用 {sf}
.
附带的众所周知且备受喜爱的 nc.shp
shapefile
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)
我正在尝试使用 sf
库中的 st_centroid
函数在 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))
通过 geom_sf_text()
调用的 fun.geometry
参数指定质心位置可能会更好 / 顺便说一下,默认值为 sf::st_point_on_surface()
- 这是一个很好的默认值如果多边形有一个洞,请确保标签没有放在洞内。
考虑这个例子,使用 {sf}
.
nc.shp
shapefile
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)