เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ทำไมกรีนแลนด์ถึงดูใหญ่โตขนาดนี้?

ลองดูพล็อตให้ละเอียดขึ้น ทำไมกรีนแลนด์ถึงดูใหญ่กว่าสหรัฐอเมริกาแผ่นดินใหญ่ ทั้งที่จริงแล้วมีพื้นที่เพียงประมาณหนึ่งในสามเท่านั้น?

เมื่อวาดตำแหน่งของลองจิจูดและละติจูดบนแกน x และ y ของพล็อต เราจะถือว่า 1 องศาของลองจิจูดมีขนาดเท่ากันทุกที่ อย่างไรก็ตาม เนื่องจากโลกมีรูปร่างใกล้เคียงทรงกลม ระยะทางที่สอดคล้องกับ 1 องศาของลองจิจูดจึงขึ้นอยู่กับละติจูด โดยอยู่ที่ประมาณ 111 กม. ที่เส้นศูนย์สูตร และลดลงเหลือ 0 กม. ที่ขั้วโลก

วิธีที่เราแปลงตำแหน่งบนทรงกลมให้กลายเป็นระนาบสองมิตินั้นเรียกว่า การฉายภาพ (projection) ค่าเริ่มต้นที่ใช้อยู่นี้ (รู้จักในชื่อ Equirectangular projection) จะบิดเบือนความกว้างของพื้นที่ใกล้ขั้วโลก การฉายภาพทุกแบบล้วนมีการบิดเบือนในรูปแบบใดรูปแบบหนึ่ง (เพราะทรงกลมไม่ใช่ระนาบ!) แต่แต่ละแบบจะพยายามรักษาคุณสมบัติที่แตกต่างกัน เช่น พื้นที่ มุม หรือระยะทาง

ใน tmap ฟังก์ชัน tm_shape() รับอาร์กิวเมนต์ projection เพื่อให้เปลี่ยนการฉายภาพสำหรับพล็อตได้

(หมายเหตุ: การเปลี่ยนการฉายภาพใน ggplot2 ทำได้โดยใช้ฟังก์ชัน coord_map() ดูรายละเอียดเพิ่มเติมได้ที่ ?coord_map())

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การสร้างภาพข้อมูลภูมิสารสนเทศใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

เพื่อให้เห็นความแตกต่างระหว่างการฉายภาพแต่ละแบบ เราได้เพิ่มเลเยอร์ tm_grid() ซึ่งจะวาดเส้นลองจิจูดและละติจูดที่มีระยะห่างเท่ากันลงบนพล็อต

ภายใน tm_shape() ของคุณ:

  • ลองใช้การฉายภาพแบบ Hobo–Dyer (projection = "hd") ซึ่งออกแบบมาเพื่อรักษาพื้นที่
  • ในพล็อตที่สอง ลองใช้การฉายภาพแบบ Robinson (projection = "robin") ซึ่งเป็นการประนีประนอมระหว่างการรักษามุมเฉพาะที่และพื้นที่
  • เพื่อความสนุก ลองวาดพล็อตเดิมซ้ำ แต่เพิ่ม tm_style("classic") เพื่อดูว่า tmap สามารถควบคุมลักษณะการแสดงผลของแผนที่ได้ทุกด้านอย่างไร

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

library(sp)
library(tmap)

# Switch to a Hobo–Dyer projection
tm_shape(countries_spdf) +
  tm_grid(n.x = 11, n.y = 11) +
  tm_fill(col = "population", style = "quantile")  +
  tm_borders(col = "burlywood4") 

# Switch to a Robinson projection
tm_shape(countries_spdf) +
  tm_grid(n.x = 11, n.y = 11) +
  tm_fill(col = "population", style = "quantile")  +
  tm_borders(col = "burlywood4") 

# Add tm_style("classic") to your plot
แก้ไขและรันโค้ด