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")