歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 【R】用 ggplot2 繪制漂亮的分級統計地圖

【R】用 ggplot2 繪制漂亮的分級統計地圖

日期:2017/3/1 9:20:52   编辑:Linux編程

最近我一直嘗試利用R繪制地圖,我從網上找到了上百種不同的實現方法,然而其中卻沒有適用於我的數據的方法。最終,我從以下幾個博客【1】中找到了靈感。我在整合這些資源的基礎上,通過不斷的試驗和修正得到了一個較好地解決方案。這個方案就是本篇博文的主要內容。

本篇博文中展示了如何利用 ggplot2 來繪制分級統計地圖,同時還介紹了如何更改圖例、顏色等參數指標,以及如何導出圖像文件。

數據預處理

繪制分級統計地圖需要一些軟件包,你最好確認你的電腦中已經安裝並加載了它們。我們利用 maptools 庫中的 readShapeSpatial() 函數來讀取形狀數據。形狀數據是儲存了經緯度等地圖信息的空間向量數據。好消息是,你可以免費下載這些數據!比如,你可以在這個網站中【2】下載全球各個 國家的形狀數據。

我的項目是對印度的數據進行繪圖分析,所以我下載了印度的形狀數據並將它們導入到 R 中。

我們所導入的形狀數據是一個空間類型的數據,我們可以檢查它的變量名來觀測它包含哪些內容。比如我們可以輸出各個邦的名稱:

現在我們已經得到目標數據。接下來我將會編造一些數據,你也可以導入 csv 格式的數據或者從你估計的模型中提取數據。最重要的一點是,新導入的數據中 id 號碼必須和形狀數據中的 id 一致,因為我們等會要合並這兩個數據集。

[譯者注]此處代碼有誤,原數據的ID編碼為1287-1321,所以“id=1:num.states”應改為“id=1286+(1:num.states)”。

現在我們需要整合形狀數據和目標數據集。首先,我們利用 ggplot 中的 fortify() 函數將形狀數據轉換成數據框格式的數據。該函數可以根據特定的識別變量將數據轉化成數據框格式。

[譯者注]此處顯示的 ID 數據與原數據集的 ID 數據不一致。

我們可以看到這是一個常見的數據框格式的數據,其中列向量包含了經緯度數據。

接下來我們根據 ID 數據合並兩個數據集,並保證空間數據集中沒有缺失值。更重要的是,我們需要根據變量 order 對數據集進行排序。

基礎繪圖

我們准備利用 ggplot()、geom_polygon() 和 coord_map() 函數來繪圖。

高階繪圖

上一部分只是繪圖的開始,我們還可以通過調整其他參數使圖形變得更漂亮。首先,我們可以利用 ggmap() 庫中的 theme_nothing() 來刪除背景和網格線,同時還需要設置 legend 的參數繪制圖例。當然,我們還可以更改圖例和整個圖像的標題。

接下來,我們將配色改為“YlGn”(從黃色到綠色過渡)。你可以通過 display.brewer.all() 函數來觀察具體配色情況。

我們也可以利用 scales 庫中的 pretty_breaks() 函數來獲取最佳分割點。如果你不喜歡 pretty_breaks() 的方法,你還可以通過 scale_fill_gradient() 來實 現:scale_fill_gradient(name=”var”,limits=c(0,100),low=”white”,high=”red”)

其他參數:

如果你想要將數值表示為暗色而不是亮色,那麼你們可以在 scale_fill_distiller() 中加入 trans=”reverse”。

如果你面對的是離散型變量,那麼你應該采用 scale_fill_manual() 函數:

此外,你還可以將各個邦的名稱也繪制到地圖上。首先,你需要識別出每個邦名對應的經緯度數據。本文中,我們利用 aggregate() 函數計算每個州經緯度取值范圍的均值並作為對應邦名的坐標。

雖然這張圖看起來有點亂,但是通過其他設置它將變得非常有用。當然你還可以利用 geom_text() 在地圖中添加一些重要的識別信息。

導出地圖數據

最後,我們可以用兩種方法導出地圖數據。

方法一:利用 Cairo 來導出地圖。(MAC需要安裝 X11)

首先我們將圖像保存到對象中,然後利用 ggsave() 將該對象轉化成 png 文件。

方法二:利用 pdf() 函數將對象保存為 pdf 文件

參考資料:

【1】 http://www.kevjohnson.org/making-maps-in-r/ ;

http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html

【2】http://www.diva-gis.org/gdata

原文鏈接:

http://rforpublichealth.blogspot.de/2015/10/mapping-with-ggplot-create-nice.html

原文作者:Slawa Rokicki

翻譯:Fibears

Copyright © Linux教程網 All Rights Reserved