先上圖
R語言的REmap包擁有非常強大的空間熱力圖以及空間遷移圖功能,里面內置了國內外諸多城市坐標數據,使用起來方便快捷。
開始
首先安裝相關包
install_packages("devtools")
install_packages("REmap")
library(devtools)
library(REmap)
我們來試試其強大的城市坐標獲取功能
city<- c("beijing","上海")
get_geo_position(a)
我們可以得到如下表結果,即上海和北京兩所城市的經緯度坐標,這樣寫可以看出,無論輸入漢語拼音“beijing”或是漢語“上海”,都是可以被識別的。
\[ \begin{array}{c|ccc} id & \text{lon} & \text{lat} & \text{city} \\ \hline 1 & 116.413554 & 39.911013 & beijing \\ 120 & 121.480237 & 31.236305 & 上海 \\ \end{array} \]
##拿到數據該怎么辦 那么,但你拿到一份“城市-指標”數據,如何畫出該指標的空間熱力圖呢?我這邊給大家示范一份自己的問卷數據QuesData,部分數據見下表:
\[ \begin{array}{cc} \text{city} & \text{value} \\ \hline 上海 & 95 \\ 大同 & 36 \\ 北京 & 19 \\ 合肥 & 14 \\ 泰安 & 12 \\ \end{array} \]
面對以上整理好的數據,我們做出如下處理:
df<-data.frame(get_geo_position(as.vector(QuesData$city)))
df2<-data.frame(df[1:2],QuesData$value)
得到我們想要的數據如下:
\[ \begin{array}{ccc} \text{lon} & \text{lat} & \text{value} \\ \hline 116.413554 & 39.911013 & 19 \\ 121.480237 & 31.236305 & 95 \\ \end{array} \]
##數據處理完后便可以直接繪圖了
options(remap.js.web = T)
theme1 <- get_theme(theme = "dark",lineColor = "White",backgroundColor = "black",titleColor = "#fff",borderColor = "blue",regionColor = "white",labelShow = T,pointShow = F,pointColor = "gold")
remapH(df2,maptype = 'china',theme=theme1,blurSize = 35,color = "blue",minAlpha = 20,opacity = 1)
- 其中,第一句options是為了將web設置為激活狀態,由於REmap是基於D3.js繪圖引擎的,需要使用網頁js產生動態效果。
- 第二個是為了生成一個主題,這個就像ggplot2的一個圖層一樣(個人理解),其中,theme為主題,有Dark,Bright,Sky,None四種,選前三種時后續設置失效,因為你都定主題了,怎么還想做其他調整呢?如果要設置線條顏色,背景色,邊界顏色這些,主題就要選擇為None,其余的顏色設置自己摸索吧,不會就參看get_theme命令。
- 第三行即畫圖命令,theme=theme1來指定主題,blursize和minalpha是調整顏色區塊大小和深淺的,大家自己調整之后看看效果就知道啦! 最終得到一開始那幅圖,需要數據的請發送郵件至 595403043@qq.com~
其他空間作圖
當然,如果你覺得這種方式不夠美觀,又想將空間數據以較美觀的方式呈現,你也可以嘗試空間分位圖,推薦軟件GeoDa和Stata,當然R也可以畫,但是會非常難看。這里上一張stata的直出圖: stata命令非常簡單,畫這一張圖只用了一行命令,但是你需要.shp文件,即地理坐標數據文件,該數據在世界地理信息網站上可以免費下載到。
GeoDa是一款專門做界面空間計量的軟件,能夠以界面的方式繪制各種空間圖形,非常好用,但是也有其分析的局限性。
當然不能忘了還有ArcGis地理信息系統,這個太強大了,,,不知道該說啥。。。