【发布时间】:2016-02-10 00:17:39
【问题描述】:
我正在尝试使用来自 cshapes 包和 sp::spTransform 的数据绘制重新投影的世界地图,但投影会导致绘图失真。 如何正确重新投影和绘制cshapes 地图?
这是一个示例,显示地图本身可以很好地绘制(代码改编自this blog post):
library("cshapes")
library("ggplot2")
library("rgdal")
wmap <- cshp(date=as.Date("2012-06-30"))
wmap_df <- fortify(wmap)
ggplot(wmap_df, aes(long,lat, group=group)) +
geom_polygon() +
labs(title="World map (longlat)") +
coord_equal()
ggsave("~/Desktop/map1.png", height=4, width=7)
这是我重新投影到 Robinson 时的失真版本:
wmap_robin <- spTransform(wmap, CRS("+proj=robin"))
wmap_df_robin <- fortify(wmap_robin)
ggplot(wmap_df_robin, aes(long,lat, group=group)) +
geom_polygon() +
labs(title="World map (robinson)") +
coord_equal()
ggsave("~/Desktop/map2.png", height=4, width=7)
一些附加信息:
- 我知道国家边界还有其他数据源,但我需要反映国家边界变化的地图,
cshapes就是这样做的。 - 我的猜测是问题与底层地图多边形的问题有关,但我不知道从哪里开始寻找,最好问我最终想要得到什么,而不是如何解决预感。
- 问题不在于
ggplot2,用基本图形绘制地图会显示相同的失真 (plot(wmap_robin))。
【问题讨论】: