需要準備的數據
- 繪圖之前需要準備加載的三個包,沒有安裝的同學可以先安裝:
library(maps)
library(mapdata)
library(maptools)
- 需要準備的數據
數據中包含3個文件bou2_4p.dbf,bou2_4p.shp和bou2_4p.shx,把它們都放在chinamapdata文件夾中。
以下是下載地址:下載鏈接
好了,上面都準備好了就可以開始了。
讀取數據&了解數據
加載中國行政區地圖
map<-readShapePoly('chinamapdata/bou2_4p.shp')
先畫個圖看看
plot(map)
ok,很神奇有沒有,簡短的一行代碼,一張中國地圖就出來了。
其實,真正復雜的是畫圖所要調用的數據map。
接下來我們來看看數據長啥樣,需要說明的是本人對這個數據也沒有了解透徹,本篇文章中介紹的只是目前自己理解的部分,如果有對此數據深入研究的同學,期待你的留言,只要有新的認識,我都會更新在文章中。
length(map)
[1] 925
names(map)
[1] "AREA" "PERIMETER" "BOU2_4M_" "BOU2_4M_ID" "ADCODE93" "ADCODE99" "NAME"
可以看出,map數據中包含了925條記錄,每條記錄中都含有
- 面積(AREA)
- 周長(PERIMETER)
- 各種編號、
- 中文名(NAME)等字段。
其中中文名(NAME)字段是以GBK編碼的。
利用iconv 格式轉換函數來轉換各省名稱
table(iconv(map$NAME, from = "GBK"))
得出以下結果:
可以看出,不同的省,數據中用的存儲空間不一樣,有的可能只用了一行紀錄,有的可能用了幾十行。
運行一下這個,,其實就可以知道每個省的數據具體存在哪一行
iconv(map$NAME, from = "GBK")
顯示一部分運行結果,結果一共有925個
我們來看看黑龍江:
plot(map[1,])
對,就是第一行畫出來就是黑龍江
按照這個原理,其實可以單獨畫出每個省的地圖。
所以中國地圖和各省市地圖基本上都可以通過maptools搞定。關鍵是要有數據。
接下來會在系列文章中用ggplot2繪圖系統結合中國地圖做一些可視化的東西。