我正在尝试使用来自 cshapes
包和 sp::spTransform
的数据绘制重新投影的世界 Map ,但投影导致扭曲的图 . How can I correctly reproject and plot a cshapes map?
这是一个示例,显示 Map 自身绘制良好(代码改编自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)
当我重新投入罗宾逊时,这是扭曲的版本:
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)
一些额外的信息:
-
我知道有国家边界的其他数据来源,但我需要反映国家边界变化的 Map ,这些 Map 是
cshapes
. -
我的猜测是问题与底层 Map 多边形的问题有关,但我不知道从哪里开始寻找,最好问我到底想要得到什么,而不是如何解决预感 .
-
问题不在于
ggplot2
,用基本图形绘制 Map 会显示相同的扭曲(plot(wmap_robin)
) .
2 回答
您可以使用
raster::crop
删除小于-180或大于180的节点使用sf的解决方案更新2018年:
输出是: