已解决:如何消除 ggplot 绘制局部世界地图时出现的冗余横线和色块?
- 已编辑
Cloud2016 回帖也很详尽。赞回帖姿势!
你提到的 ggplot2 官方说明书 章节末尾给出的示例里,图也是乱的,居然没有任何说明。
进一步比较,发现orientation = c(90, 0, 0)
对平面地图来说仍不完美。由于视角在北极,高纬度地区距离立足点较近,纬线比较稀疏,导致地图整体上纬线不均匀。这对球面来说当然更逼真,但对平面来说就不大合理了。一换视角位置,老毛病又出现了。
如果是球面,当我想同展示一个宽广区域时,就会受限制。
有什么办法吗?要求平面,而且经纬线均匀。@Cloud2016
- 已编辑
dapengde 如果是球面,当我想同展示一个宽广区域时,就会受限制
- 你要多宽广?举个栗子
- 使用球面坐标,如 "ortho" 为了好看一点
- 纬线不均匀,这个好理解,一方面是投影系的原因(默认的平面坐标系是墨卡托投影),一方面是观察角度的原因,需要自己去试试,诸多坐标投影我也不是很了解 @HarryZhu-7harryprince 应该有好的做法,他是专家
- 已编辑
Cloud2016 你要多宽广?举个栗子
比如说,展示经度为 -140° 到 120° 范围:
p <- ggplot(map_data("world"), aes(long,lat,group=group)) + geom_polygon()
lr <- c(-140, 120)
# 1. 如果用默认投影和默认视角,则出现冗余色块
p + coord_map(xlim = lr)
# 2. 如果用默认投影和北极视角,冗余色块是消除了,但是纬度不均匀
p + coord_map(xlim = lr, orientation = c(90, 0, 0)) + scale_y_continuous(breaks = -9:9 * 10)
# 3. 如果用球面投影 "ortho",冗余色块也消除了,纬度虽然不均匀,但显示在球面上更为自然,可是球背面就被挡住了,非洲和南美洲很难看到:
p + coord_map("orthographic", xlim = lr)
如何能做出纬度均匀、无冗余色块、展示宽广区域的地图呢?我这样的要求算不算太高……
完美解决方案来啦:用 coord_quickmap()
:
p + coord_quickmap(xlim = lr)
同时满足了我的三个要求:无冗余色块,经纬度均匀,展示随意指定经纬度范围。
dapengde 顺便补充一下二者区别,来自帮助文档 ?coord_quickmap
coord_map
projects a portion of the earth, which is approximately spherical, onto a flat 2D plane using any projection defined by the mapproj package. Map projections do not, in general, preserve straight lines, so this requires considerable computation.coord_quickmap
is a quick approximation that does preserve straight lines. It works best for smaller areas closer to the equator.