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