我們前邊用三篇推文介紹了用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)
大功告成
通過細節展示中國部分:
寫在最後:
投必得畢竟不是地理信息方面的專家,不過我們已經盡力專業,全面,如果小夥伴們發現有任何瑕疵,請一定對我們批評指正!讓我們大家一起守護祖國的一點一滴!