為什麼格陵蘭看起來這麼大?
仔細看看這個圖。為什麼格陵蘭看起來比美國本土還大,明明實際上只有大約三分之一的大小?
當你把經度與緯度分別畫在圖的 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