sf에서 data.frame으로 : as.data.frame 전에 as_Spatial이 필요한 이유
Nov 05 2020
다음을 얻기 위해 geom_sf () 플롯에 레이블을 추가한다고 가정 해 보겠습니다.
2020 년 11 월 현재 방법이 존재하지 않으므로 경고가 표시되고 시도 할 때 아무것도 표시되지 않습니다.
library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))
ggplot() +
geom_sf(data = nc, aes(label = CNTY_ID))
Warning message:
Ignoring unknown aesthetics: label
geom_text () 를 통해 수동으로 레이블을 추가하려고 할 때 ggplot 에서 사용할 수있는 nc 에서 "nc2" 로 이동하는 방법을 알 수 없습니다 .
다음을 시도하면 출력이 예상과 다릅니다.
nc2 <- nc %>% st_centroid() %>% # ok, transform multypoligon to centroid
as.data.frame() # does not return something useful, WHY ?
하지만 내가 할 경우 :
nc2 <- nc %>% st_centroid() %>%
as_Spatial() %>% # this is nonsense, why ?
as.data.frame()
이제 다음을 사용하여 적절한 레이블로 처음에 원하는 플롯을 얻을 수 있습니다.
ggplot() +
geom_sf(data = nc) +
geom_text(data=nc2, aes(coords.x1, coords.x2, label=CNTY_ID))
하기 위해 권장되는 방법은 무엇입니까 에서 이동 SF 에 tibble / data.frame 에 ggplot은? 나에게 이것은 일반적인 작업이며 두 단계 (as_Spatial () + as.data.frame ())를 거쳐야하는 것은 잘못된 것 같습니다.
답변
3 AllanCameron Nov 05 2020 at 06:45
당신은 사용할 수 있습니다 stat_sf_coordinates와 geom = "text"ggplot에. 두 번째 데이터 프레임을 만들 필요조차 없습니다. st_centroid매개 변수로 전달할 수 있습니다 .
다음은 실제로 최신 버전의 ggplot2 및 sf가 설치되어있는 모든 사용자에게 적용되는 전체 표현입니다.
ggplot2::ggplot(sf::st_read(system.file("shape/nc.shp", package = "sf"))) +
ggplot2::geom_sf() +
ggplot2::stat_sf_coordinates(fun.geometry = sf::st_centroid,
ggplot2::aes(label = CNTY_ID), geom = "text")