为什么格陵兰这么大?
仔细看看这个图。为什么格陵兰看起来比美国本土还大,而实际上它只有美国本土面积的大约三分之一?
当您在图的 x、y 轴上直接绘制经度和纬度时,相当于把 1 度经度在任何地方都当作同样的长度。然而,由于地球大致是球形,1 度经度所对应的实际距离取决于纬度:在赤道约为 111 km,而在两极为 0 km。
把球面上的位置绘制到二维平面上的方式,称为投影。此处使用的默认投影(也称为"等距圆柱投影"或 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