我们前边用三篇推文介绍了用R对世界地图搭配数据的绘制,分别是:
用ggplot2包绘制主要地区和城市的疫情格局:
用tmap包绘制国家/地区水平的整体情况:如何用R绘制新冠病毒世界格局(二)(附完整代码)。
探讨局部地区疫情发展情况的绘制以及绘制时间序列动态图:用R绘制局部地区疫情分布图+时间序列动态图。
三篇推送受到了非常好的反响,推文中也包含实列代码,感兴趣的小伙伴可以亲自测试一下。但是同时,我们推文中存在的一个“瑕疵”,正如有位朋友的留言(上图中最后一个),一直让投必得编辑部如鲠在喉,终于经过我们一段时间的努力,我们很骄傲的宣布:使用咱们投必得的地图文件包,让你绘制出一幅包含最全中国的世界地图:中国一点都不能少!
前言
我们中国的地图一点都不能少,然而我发现大部分的R包中的地图文件对中国地图都做的不认真,这些包都不是中国人开发的,所以我们也没有什么办法,但作为中国人,我们有自己神圣不可分割的领土。尤其是在一张全球地图中。
那为什么我们今天要做这个事情呢?因为我们迄今为止没有发现一份世界地图在r中,R包中带有的地图,有正确的标注中国边境,连西藏南部和台湾都是错误的。不用说海南诸岛了,和九段线了!
首先是得到一份标准的中国地图,这个网络上很难下载得到。我们通过地理信息专业的朋友搞到了一份拥有正确中国边境的世界高分辨地图shape文件。这张地图绘制出来超过了1个G,可以满足大幅出版印刷需求,但是我们正常科研用的没必要这么大(尤其是R中作图),所以我们在这里将这份地图改成了适合我们常用的版本。
载入R包
library(maptools)
library(sf)
library(ggplot2)
library(maps)
library(mapdata)
library(sf)
library(raster)
library(dplyr)
library(spData)
使用正确地图文件添加世界地图总体轮廓:
worldmap <- sf::st_read(../正确的世界地图/WorldMap.shp)worldmapp = ggplot() + geom_sf(data = worldmap ,aes( geometry = `geometry`,fill = `ENG_NAME`)) + scale_fill_discrete(guide = FALSE)pggsave("worldmap1.pdf",p,width = 40,height = 30)
使用九段线文件添加相应实线:
nine <- sf::st_read(../中国边境等/全国行政区划练习用数据/国界九段线.shp)ninepp1 = p +geom_sf(data = nine,aes( geometry = `geometry`),color = "grey30")p1ggsave("worldmap2.pdf",p1,width = 40,height = 30)
南海诸岛很小,但是要都添加上去:
northear <- sf::st_read(../中国边境等/全国行政区划练习用数据/南海诸岛.shp)p2 = p1 +geom_sf(data = northear,aes( geometry = `geometry`),color = "grey30")p2# p = ggplot() + geom_sf(data = worldmap ,aes( geometry = `geometry`,group = `ENG_NAME`),fill="grey",alpha=0.3) +# scale_fill_discrete(guide = FALSE)# p# ggsave("worldmap.pdf",p,width = 24,height = 16)ggsave("worldmap3.pdf",p2,width = 40,height = 30)
通过细节展示中国部分:
写在最后:
投必得毕竟不是地理信息方面的专家,不过我们已经尽力专业,全面,如果小伙伴们发现有任何瑕疵,请一定对我们批评指正!让我们大家一起守护祖国的一点一滴!
04-05 来源:凤凰国际iMarkets
04-05 来源:百度百家
04-05 来源:凤凰财经