coord_sf를 사용하여 배율이 조정 된 ggplot 맵에 배율 막대를 추가 하시겠습니까?

Aug 18 2020

sf 패키지와 ggplot2를 사용하여지도를 생성했습니다.

library(ggplot2)
library(sf)
library(rnaturalearth)
state_prov <- rnaturalearth::ne_states(c("united states of america", "canada"), returnclass="sf")
x <- ggplot(data=state_prov) + 
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) 
print(x)

Rstudio에서 다음 맵을 생성합니다.

훌륭하지만 스케일 바를 추가해야합니다. ggsn을 사용하여 코드를 수정하려고 할 때 스케일 바가 전혀 보이지 않습니다.

library(ggplot2)
library(sf)
library(rnaturalearth)
state_prov <- rnaturalearth::ne_states(c("united states of america", "canada"), returnclass="sf")
x <- ggplot(data=state_prov) + 
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
ggsn::scalebar(state_prov, location="topleft", dist = 50, dist_unit = "km", 
                 transform=TRUE, model="WGS84", height=0.1)
print(x) 

나는 높이, 거리 및 위치를 변경하려고 시도했지만 성공하지 못했습니다. coord_sf ()에 대한 호출을 제거하면 스케일이 제대로 조정되지 않은 것을 볼 수 있으므로 ggsn이지도가 coord_sf ()에 의해 확대되고 있음을 인식하지 못한다고 생각합니다.

이 문제를 어떻게 해결합니까? ggsn은 쉽게 수정할 수없는 것 같습니다. 다른 패키지 나 메서드를 사용할 수 있지만 동일한 구조를 기반으로하는 훨씬 더 복잡한 맵이 있기 때문에 비슷한 방식으로 ggplot을 계속 호출해야합니다.

감사!

답변

2 nniloc Aug 18 2020 at 07:33

언급했듯이 coord_sf코드의 일부 를 주석 처리 하면 스케일 바가 표시됩니다. 내 생각 엔 전체 데이터 세트 에서 위치를 ggsn::scalebar가져오고 스케일 바를 사용 하여 확대하면 잘립니다.topleftstate_provcoord_sf

편집 : 이 축척에서 위도 / 경도 투영을 사용하여 축척 막대를지도에 배치 할 때 극심한 왜곡에주의하십시오.https://stackoverflow.com/a/41373569/12400385

다음은 스케일 바를 표시하는 몇 가지 옵션입니다.

옵션 1

에서 정의한대로 줌을 인식하는 것 ggspatial::annotation_scale대신 사용하십시오 .ggsncoord_sf

ggplot(data=state_prov) + 
  geom_sf()+
  coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
  ggspatial::annotation_scale(location = 'tl')

옵션 2

원래 코드를 사용하되 state_prov플로팅하기 전에 잘라서 scalebar올바른 topleft.

state_prov_crop <- st_crop(state_prov, xmin=-170, xmax = -95, ymin = 40, ymax = 75)

ggplot(data=state_prov_crop) + 
  geom_sf()+
  #coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
  ggsn::scalebar(state_prov_crop, location="topleft", dist = 50, dist_unit = "km", 
                 transform=TRUE, model="WGS84", height=0.1)