Coord_sf kullanılarak ölçeklenen bir ggplot haritasına bir ölçek çubuğu eklensin mi?

Aug 18 2020

Sf paketini ve ggplot2'yi kullanarak bir harita oluşturdum:

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'da aşağıdaki haritayı oluşturur:

Bu harika, ama ona bir ölçek çubuğu eklemem gerekiyor. Kodu ggsn kullanarak değiştirmeye çalıştığımda, ölçek çubuğunu hiç görmüyorum.

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) 

Başarı olmadan yüksekliği, st.disteyi ve konumu değiştirmeye çalıştım. Coord_sf () çağrısını kaldırdığımda kötü ölçeklendirilmiş bir ölçek çubuğu görüyorum, bu da beni ggsn'nin haritanın coord_sf () tarafından yakınlaştırıldığını fark etmediğine inandırıyor.

Bunu nasıl düzeltirim? ggsn kolayca değiştirilebilir görünmüyor. Başka bir paket veya yöntem kullanmaya açığım, ancak aynı yapıya dayanan çok daha karmaşık bir haritam olduğu için ggplot'u benzer şekilde çağırmaya devam etmem gerekiyor.

Teşekkürler!

Yanıtlar

2 nniloc Aug 18 2020 at 07:33

Bahsettiğiniz gibi, coord_sfkodunuzun bir kısmını yorumlarsanız, ölçek çubuğu görünür. Tahminim, konumunu tüm veri kümesinden ggsn::scalebaralıyor olmalı ve ölçek çubuğunu kullanarak yakınlaştırdığınızda kırpılıyor.topleftstate_provcoord_sf

Düzenleme: Bu ölçekte enlem / boylam projeksiyonla bir haritaya ölçek çubuğu yerleştirirken aşırı bozulmaya dikkat edin:https://stackoverflow.com/a/41373569/12400385

Bir ölçek çubuğunun görünmesi için birkaç seçenek.

seçenek 1

Kullanım ggspatial::annotation_scaleyerine ggsntanımlanan zoom tanımak gibi görünüyor coord_sf.

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

seçenek 2

Orijinal kodunuzu kullanın, ancak doğru state_provolanı scalebarbulabilmek için çizmeden önce kırpın 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)