sf
패키지 (및 관련 패키지)를 사용하여 shapefile을 읽고 ggplot2
플로팅을 위해 (및 친구)를 사용하여 R에서 GIS 맵을 만들고 있습니다 . 이것은 잘 작동하지만 강이나 도로와 같은 지형지 물의 레이블 배치를 (자동 / 프로그래밍 방식으로) 만들 수있는 방법을 찾을 수 없습니다. 이러한 피처는 일반적으로 불규칙한 모양의 선 스트링입니다. 예를 들어 wikimedia에서 첨부 된 이미지를 참조하십시오.
이 ggrepel
패키지는 자동화 된 방식으로 포인트에 레이블을 지정하는 데 효과적이지만, 개별 Lat / Long 포인트가 아닌 다른 지리적 기능에는 적합하지 않습니다.
각 기능에 개별 텍스트 레이블을 개별적으로 배치 하여이 작업을 수행 할 수 있다고 생각하지만 가능한 경우 더 자동화 된 것을 찾고 있습니다. 그러한 자동화는 사소한 문제는 아니라는 것을 알고 있지만 이전에는 해결되었습니다 (ArcGIS는 maplex라는 확장명 으로이 작업을 수행하는 방법이 있지만 소프트웨어에 액세스 할 수 없으며 계속 유지하고 싶습니다. 가능하면 R).
누구든지 이것을하는 방법을 알고 있습니까?
여기 MWE :
#MWE Linestring labeling
library(tidyverse)
library(sf)
library(ggrepel)
set.seed(120)
#pick a county from the built-in North Carolina dataset
BuncombeCounty <- st_read(system.file("shapes/", package="maptools"), "sids") %>%
filter(NAME == "Buncombe")
#pick 4 random points in that county
pts_sf <- data.frame(
x = seq(-82.3, -82.7, by=-0.1) %>%
sample(4),
y = seq(35.5, 35.7, by=0.05) %>%
sample(4),
placenames = c("A", "B", "C", "D")
) %>%
st_as_sf(coords = c("x","y"))
#link those points into a linestring
linestring_sf <- pts_sf %>%
st_coordinates() %>%
st_linestring()
st_cast("LINESTRING")
#plot them with labels, using geom_text_repel() from the `ggrepel` package
ggplot() +
geom_sf(data = BuncombeCounty) +
geom_sf(data = linestring_sf) +
geom_label_repel(data = pts_sf,
stat = "sf_coordinates",
aes(geometry = geometry,
label = placenames),
nudge_y = 0.05,
label.r = 0, #don't round corners of label boxes
min.segment.length = 0,
segment.size = 0.4,
segment.color = "dodgerblue")
ggrepel
. 기본적으로 이미 수행 한 작업을 다시 실행하십시오. 이렇게하면 유용한 답변을 얻을 가능성이 훨씬 줄어 듭니다.