Coord_sf kullanılarak ölçeklenen bir ggplot haritasına bir ölçek çubuğu eklensin mi?
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
Bahsettiğiniz gibi, coord_sf
kodunuzun bir kısmını yorumlarsanız, ölçek çubuğu görünür. Tahminim, konumunu tüm veri kümesinden ggsn::scalebar
alıyor olmalı ve ölçek çubuğunu kullanarak yakınlaştırdığınızda kırpılıyor.topleft
state_prov
coord_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_scale
yerine ggsn
tanı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_prov
olanı scalebar
bulabilmek 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)
