天天看點

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

用r繪制地圖比較簡單。比如畫一下全國範圍的區域,可以用如下代碼:

生成的圖如下:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

但是,可以看出這樣繪制的地圖的形狀有些扁平。這是因為,在繪圖的過程中,預設把經度和緯度作為普通資料,均勻平等對待,繪制在笛卡爾坐标系上造成的。其實,地球的球面圖形如何映射到平面圖上,在地理學上是有一系列不同的專業算法的。地圖不應該畫在普通的笛卡爾坐标系上,而是要畫在地理學專業的坐标系上。

也可以安裝<code>maps</code>和<code>mapdata</code>這兩個包,然後輸入下面的指令:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

其中<code>map()</code>函數還可以加上很多參數,大緻如下:

可以設定資料庫、地區、精确度、邊界等,在這裡就不一一詳述,具體的用法可以?map。

在實際使用的過程中,我們往往會根據自己的需要對地圖中的某些省份着以特定的顔色,這時就可以通過調節<code>plot</code>指令中的<code>fg</code>參數來予以實作。

首先看看r繪制地圖的原理:

在繪制地圖時,每一個省市自治區或者島嶼都是用一個多邊形來表示的。之前的gis資料,其實就是提供了每一個行政區其多邊形逐點的坐标,然後r軟體通過順次連接配接這些坐标,就繪制出了一個多邊形區域。在上面的資料中,一共包含了925個多邊形的資訊,之是以有這麼多是因為一些省份有很多小的附屬島嶼。在這925個多邊形中,每一個都對應一個唯一的id,編号分别從1到925。

<code>plot</code>指令中的<code>fg</code>參數在本例中應該是一個長度為925的向量,其第i個分量的取值就代表了地圖中第i個多邊形的顔色。一個簡單的嘗試是運作下面這個指令看看效果:

生成的圖如下所示:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

于是自然就産生了一個問題:如何擷取某一個特定地區的id,進而設定我們想要的顔色?事實上,在變量x中,就已經存儲了我們想要的資訊。在r中輸入“<code>x[[2]]</code>”或“<code>x$att.data</code>”,會得到一個925行7列的資料框,這其實是bou2_4p.dbf這個檔案中存儲的資訊,之前的<code>read.shape()</code>函數雖然讀取的是bou2_4p.shp檔案,但在預設情況下會把dbf檔案的資訊也放到變量之中。對于這個資料框,其行名就是每一個區域的id編号,第一列和第二列分别是面積和周長,最後一列是該區域所屬的行政區名,其它的列應該也是一些編号性質的變量。于是,通過查找相應的行政區對應的行名,就可以對<code>fg</code>參數進行指派了。下面是我編的一個函數,用來生成所需的col向量:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

其中<code>mapdata</code>是存放地圖資料的變量,在上面的例子中就是x,<code>provname</code>是需要改變顔色的地區的名稱,<code>provcol</code>是對應于<code>provname</code>的代表顔色的向量(名稱和數字均可),<code>othercol</code>是其它地區的顔色。舉例如下:

生成的圖資料如下:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

利用類似的方法就可以根據自己的需要對不同的區域進行着色,下面再舉一例。從國家統計局擷取2007年我國各地區的人口資料,然後根據人口的多少對各省份進行着色。程式如下:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

其中顔色越深的地方代表人口數越多,反之為人口數越少。

在繪制地圖的過程中,還有一個比較有用的參數是<code>recs</code>,它是一個由多邊形id組成的向量,表示在地圖中隻畫出這些id所代表的區域。利用這個參數,就可以畫出某一部分的地圖,例如下面的例子是我國中部六省的地圖:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

生成的圖:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

畫出的圖上仍然可以用<code>points()</code>函數和<code>text()</code>函數加上點和文字,而<code>maptools</code>包中還提供了一個<code>pointlabel()</code>函數,用來解決文本标簽的重疊問題。

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

以中國地圖為例,下載下傳最新的arcgis矢量地圖資料,這種地圖資料包含了很多資訊,這是畫地圖的基礎資料。下載下傳位址:

<a href="http://download.csdn.net/detail/lgstarzkhl/9427677">http://download.csdn.net/detail/lgstarzkhl/9427677</a>

用以下代碼進行地圖繪制:

使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結
使用R畫地圖資料用R畫地圖資料給地圖上色生成人口資料分布圖畫部分省地圖用R畫中國地圖并标注城市位置ggplot2繪制地圖總結

使用r的地圖擴充包可以畫出各種樣式的地圖,具體的展現形态及結合方式還有待進一步挖掘。

繼續閱讀