Tambahkan bilah skala ke peta ggplot yang telah diskalakan menggunakan coord_sf?
Saya telah membuat peta menggunakan paket sf dan 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)
yang menghasilkan peta berikut di Rstudio:

Itu bagus, tapi saya perlu menambahkan bar skala padanya. Ketika saya mencoba mengubah kode menggunakan ggsn, saya tidak melihat bilah skala sama sekali.
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)
Saya sudah mencoba mengubah ketinggian, st.dist, dan lokasi tetapi tidak berhasil. Saya dapat melihat skalebar dengan skala yang buruk ketika saya menghapus panggilan ke coord_sf (), membuat saya percaya bahwa ggsn tidak mengenali bahwa peta sedang diperbesar oleh coord_sf ().
Bagaimana cara mengatasinya? ggsn tampaknya tidak mudah dimodifikasi. Saya terbuka untuk menggunakan paket atau metode lain, tetapi saya perlu terus memanggil ggplot dengan cara yang sama karena saya memiliki peta yang jauh lebih rumit berdasarkan struktur yang sama.
Terima kasih!
Jawaban
Seperti yang Anda sebutkan, jika Anda mengomentari coord_sf
bagian dari kode Anda, bilah skala akan muncul. Dugaan saya ggsn::scalebar
harus mendapatkan lokasinya topleft
dari seluruh state_prov
dataset, dan ketika Anda memperbesar menggunakan coord_sf
skalebar akan terpotong.
Sunting: waspadalah terhadap distorsi ekstrim saat meletakkan bilah skala pada peta dengan proyeksi lintang / bujur pada skala ini:https://stackoverflow.com/a/41373569/12400385
Berikut adalah beberapa opsi untuk menampilkan bilah skala.
Pilihan 1
Gunakan ggspatial::annotation_scale
alih-alih ggsn
yang tampaknya mengenali zoom seperti yang didefinisikan dalam coord_sf
.
ggplot(data=state_prov) +
geom_sf()+
coord_sf(xlim=c(-170, -95), ylim=c(40, 75)) +
ggspatial::annotation_scale(location = 'tl')

pilihan 2
Gunakan kode asli Anda tetapi potong state_prov
sebelum membuat plot sehingga scalebar
dapat menemukan yang benar 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)
