เพิ่มแถบมาตราส่วนลงในแผนที่ ggplot ที่ปรับขนาดโดยใช้ Coord_sf?
ฉันได้สร้างแผนที่โดยใช้แพ็คเกจ 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)
ฉันพยายามเปลี่ยนความสูง st.dist และตำแหน่งแล้ว แต่ไม่สำเร็จ ฉันสามารถเห็นแถบมาตราส่วนที่ปรับขนาดได้ไม่ดีเมื่อฉันลบการเรียกไปที่ Coord_sf () ทำให้ฉันเชื่อว่า ggsn ไม่ทราบว่าแผนที่กำลังซูมเข้าโดย Coord_sf ()
ฉันจะแก้ไขปัญหานี้ได้อย่างไร ggsn ดูเหมือนจะไม่สามารถแก้ไขได้ง่ายๆ ฉันเปิดให้ใช้แพ็คเกจหรือวิธีการอื่น แต่ฉันจำเป็นต้องเรียกใช้ ggplot ต่อไปในลักษณะที่คล้ายกันเนื่องจากฉันมีแผนที่ที่ซับซ้อนกว่ามากโดยใช้โครงสร้างเดียวกัน
ขอบคุณ!
คำตอบ
ดังที่คุณกล่าวถึงหากคุณแสดงความคิดเห็นในcoord_sf
ส่วนของรหัสแถบมาตราส่วนจะปรากฏขึ้น ฉันเดาว่าggsn::scalebar
ต้องได้รับtopleft
ตำแหน่งจากstate_prov
ชุดข้อมูลทั้งหมดและเมื่อคุณซูมโดยใช้coord_sf
แถบมาตราส่วนจะถูกครอบตัดออก
แก้ไข:ระวังความผิดเพี้ยนอย่างมากเมื่อวางแถบมาตราส่วนบนแผนที่ที่มีการฉายแบบ lat / long ในระดับนี้:https://stackoverflow.com/a/41373569/12400385
นี่คือสองตัวเลือกในการรับแถบมาตราส่วนเพื่อแสดง
ตัวเลือกที่ 1
ใช้ggspatial::annotation_scale
แทนซึ่งดูเหมือนว่าจะรับรู้การซูมที่กำหนดไว้ในggsn
coord_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)
