【科研貓·繪圖】獻禮國慶70年,R語言繪製中國地圖
- 2019 年 10 月 8 日
- 筆記
建國70周年大慶即將到來,各行各業都在積極籌備迎接祖國的生日,在這個舉國歡騰的時刻,我們決定以一種特殊方式來表達自己對祖國母親的祝福:一副用R語言繪製的中國地圖。

對於為什麼要跟大家講地圖的繪製,還有個重要的原因,就是我們很多做流行病學研究的同學會涉及到地圖的繪製,其頻繁出現在Lancet或者NEJM這類頂級雜誌中,但是地圖的繪製往往又是一大難題。

對於做流行病學研究的各位來說,流行病學的數據講究「三間分布」,即人群分布、時間分布和空間分布。其中的「空間分布」最好是在地圖上展示才比較清楚。R軟體集統計分析與高級繪圖於大成,是最適合做這項工作了。關於R語言繪製地圖,可能大家還心存疑問,感覺R語言是無法完成這些工作的,下面我們逐一看來。
LEVEL 1
繪製地圖之前,需要獲取地圖的數據,包括世界地圖、中國地圖或者各省市地圖都一樣。地圖的GIS數據可以在國家基礎地理資訊中心的網站(http://nfgis.nsdi.gov.cn)裡面免費下載。官方公開的數據包括:地圖數據,及居住地、交通、河流等輔助數據。在這裡,我們把中國地圖的GIS文件分享給大家(詳情見文末客服:胖雨小姐姐)。
繪製地圖非常簡單,只要載入幾個常用的R包即可。然後讀取gis文件就能直接作圖。

做出來的中國地圖是下面這樣的,這個地圖中包括了中國的各大省市,不過這裡所有省市的顏色都是一樣的,暫時還不能幫助我們描述更多的資訊。

LEVEL 2
如果我們的功能再強大一點,把34個省市、直轄市等都標註上不同的顏色,可以簡單直接地指定col參數來實現。

在這裡,我使用了R語言中自帶的顏色方案terrain.colors()函數,其主要用來對地形定義顏色。畫出來的圖形是這樣的:

LEVEL 3
流行病學中繪製地圖主要的目的是為了描述發病率一類的資訊,然後用不同的顏色將其Highlight出來。下面我們就來試試看。

將中國的四個直轄市的名字挑出來,然後定義成四個不同的顏色,其餘省市還是用白色表示,畫出來的圖是這樣子的:

如果能夠做到這一步,那我們就能夠將感興趣的省市給凸顯出來了,比如中國首都-北京,再或者人口最多的省市-河南,再比如某某疾病發病率最高的省市等等。
LEVEL 4
那有沒有更加高級的方法,比如按照發病率的高低,或者類似的連續性變數,將不同省市/直轄市標註成不同的顏色呢?就像我們在NEJM和Lancet這一類文章中看到的。當然可以,作為無所不能的科研貓技術宅,沒有什麼對我們來說是不能實現的。下面就給大家演示一個最直觀的例子。
實例
在中國地圖中標註不同省市的人口數量
為了方便大家以後更方便地使用我們的這個程式碼,我們把數據都直接放到Excel表格中,如果大家要繪製自己的數據,只需更改這個數據即可,無需更改程式碼。我們的數據如下,省市按照「省份、直轄市、自治區、特別行政區」排列,各省市名稱按照首字母順序排列,人口數據在最後一列:

大家可以想一下,如果要按照人口數量繪製地圖的話,其實在畫圖的過程當中跟剛才的繪圖方法沒有太大區別,只是剛才用的是隨機的顏色,這裡我們把不同省份顏色按照數值高低排列即可,就是這麼簡單。具體的程式碼如下(版面問題,程式碼有縮略,需要程式碼請關注公眾號,聯繫文末客服):

繪製出來的圖形就是按照人口數量的多少進行顏色排布的:

LEVEL 5
好的,地圖繪製到這裡,相信大家的問題基本也都解決了,如果想把自己的數據和地圖中省份的顏色match上,直接更改表格中的數據,按照我們的程式碼運行即可。
下面,就是說說我們的特殊禮物了。作為數據分析師,沒有什麼比自己動手繪製一幅涵蓋祖國大好河山的地圖更有意義了,於是乎,我們純用R語言(沒有用到任何後期製圖軟體哦),通過不同的繪圖函數,給祖國的生日獻上一幅漂亮的中國地圖。

最後,祝福祖國永遠繁榮昌盛,願祖國的科研、衛生事業快速穩定發展,躍居世界一流水平。
本期乾貨
!地圖繪製程式碼!
·
關注「科研貓」公眾號,聯繫客服
胖雨小姐姐
or
折耳貓小姐姐
領取


往期乾貨找不到?自己看看下面是森么!
往期乾貨鏈接
R語言從入門到精通系列
科研作圖系列
網路圖
生存分析系列
GEO數據挖掘系列
重磅:GEO資料庫挖掘教程(4)一體化分析程式碼(帶影片+R程式碼分享)
TCGA數據挖掘系列
生物資訊入門系列
更多科研新鮮資訊、文獻精讀和生物資訊技能