R語言視覺化——REmap動態地圖
杜雨:EasyCharts團隊成員,R語言中文社群專欄作者。
興趣方向為:Excel商務圖表,R語言資料視覺化,地理資訊資料視覺化。
個人公眾號:資料小魔方(微信ID:datamofang) ,“資料小魔方”創始人。
往期回顧
今天開始,要跟著大家學習一個新的視覺化R包——REmap包。
說起來,這個包要歸功於百度的視覺化開源專案——echarts,它是國內為數不多的高水平開源視覺化js庫,在業界地位首屈一指。
經過大神的努力,我們終於可以在R語言中以簡潔的REmap函式形式,來呼叫Echarts核心功能,而不用親自去學js程式碼,就可以建立動態地圖視覺化作品。
如果有小夥伴兒熟悉百度的大資料視覺化專案——百度遷徙地圖,以及交通通勤圖,以及後來的一帶一路視覺化路線圖,肯定對那些動態地圖上流動的線條和路徑有很深的印象。
下面我們開始簡單介紹REmap的主要功能:
REmap包中涵蓋有一組函式,我所知道並用過的有REmap、REmapB、REmapC、REmapH。
每一個函式都對應著幾種炫酷的動態效果型別:
今天我們先介紹REmap函式並利用該函式製作簡單的流向圖:
安裝及載入:
install.packages("devtools")
devtools::install_github("lchiffon/REmap") #開發者/包名
library(REmap) #載入
REmap函式的作圖理念與ggplot其實還是有雷同的,它也是將資料資訊和美學資訊分開表達,資料資訊包含在資料表中,而美化修飾引數都包含在theme內。
remap(mapdata, title = " ",
subtitle = "",
theme = get_theme("Dark"))
這是一個典型的REmap函式的結構,mapdata是我們所要展示的資料框格式資料集,裡面包含了兩列資料:起點位置、終點資訊。
title用於設定主標題、subtitle用於設定副標題。而theme用於設定整個圖形的主題風格,該主題是一個封裝的函式變數,裡面包含諸多引數資訊(各種點線面的顏色、度量等資訊)。
下面是一個典型的REmap主題內的引數示例:
get_theme(theme = "Dark",
lineColor = "Random",
backgroundColor = "#1b1b1b",
titleColor = "fff",
borderColor = "rgba(100,149,237,1)",
regionColor = "#1b1b1b",
labelShow = T,
pointShow = F,
pointColor = "gold")
引數說明:
引數一:theme為總體配色,預設選項有“Dark”、“Bright”、“Sky”、“none”
引數二:lineColor為線條顏色,預設是隨機, 也可自行設定,如’red’
引數三:backgroundColor為地圖外背景顏色
引數四:titleColor為標題顏色
引數五:borderColor為地圖中地域邊緣顏色,不同省份、城市的邊緣
引數六:regionColor為地域顏色,即地圖顯示的顏色
引數七:labelShow為邏輯引數,是否顯示地域名稱,預設為T,即顯示,只用於remapC函式
引數八:pointShow為邏輯引數,是否顯示地域所在點,預設為F,不顯示,只用於remapC函式
引數九:pointColor為pointShow中點的顏色,只用於remapC函式
REmap可以非常輕鬆的獲取城市地點的經緯度資料:
以大連為例:
get_city_coord("大連")
[1] 121.62139 38.91934
如果想要獲取一組城市的經緯度資訊,可以直接賦值給城市向量:
city_list <- c("beijing","tianjin","shenyang","dalian","zhengzhou")
get_geo_position(city_list)
lon lat city
1 116.4136 39.91101 beijing
2 117.2059 39.09091 tianjin
3 123.4390 41.81134 shenyang
4 121.6214 38.91934 dalian
5 113.6313 34.75349 zhengzhou
而且據說這兩個函式大部分時候對拼音與漢字,甚至拼音的大小寫都不敏感,所以避免了很多麻煩。
建立起始點:
destination<- c("beijing","tianjin","shenyang","dalian","zhengzhou") #終點
origin<- rep("dalian",length(destination)) #起點
#合成數據框格式的起終點資料
map_data<- data.frame(origin,destination)
資料預覽:
head(map_data)
origin destination
1 dalian beijing
2 dalian tianjin
3 dalian shenyang
4 dalian dalian
5 dalian zhengzhou
作圖函式:
map_out<-remap(mapdata=map_data, #流向地圖的資料來源(依次為起點、重點兩列)
title="我是標題", #設定主標題
subtitle="我是副標題", #設定副標題
theme =get_theme(theme="Bright")) #設定主題(預設主題一共有三套:“Dark”,“Bright,”Sky“)
執行以上程式碼之後,動態圖表已經生成名為map_out的物件,只需使用plot函式呼叫一下map_out圖表物件就可以看到該動態圖表效果。
提示下,這裡的map_out的物件是一個js程式碼生成的html物件,執行完plot之後,動態圖表效果不是呈現在R的圖表視窗而是呼叫了桌面瀏覽器的Web視窗。
plot(map_out)
Save img as: C:\Users\ADMINI~1\AppData\Local\Temp\RtmpAxQndv/ID_20161015191055_242761.html
執行完成之後,瀏覽器視窗會自動呈現動態圖表效果:
其實仔細看以上程式碼,與ggplot的地圖程式碼相比,要簡單很多,資料集也很簡單(最重要的直接支援地點名稱而不需要經緯度資料),當然這些便利性主要歸功於它的底層程式碼是呼叫Echarts專案,地理位置資訊有百度地圖的強大系統支援。
另外兩個主題:
Dark主題:
map_out1<-remap(mapdata=map_data,title="我是標題",subtitle="我是副標題",theme =get_theme(theme="Dark"))
plot(map_out1)
Sky主題:
map_out2<-remap(mapdata=map_data,title="我是標題",subtitle="我是副標題",theme =get_theme(theme="Sky"))
map_out<-remap(mapdata=map_data,
title="我是標題",
subtitle="我是副標題",
theme =get_theme(theme="Bright"))
plot(map_out2)
以上是該函式內建的三款主題,當然如果你要想自定義主題的話,也是可以的,但是需要將theme="Sky"設定為none,否則系統主題會覆蓋掉你自定義的主題。
map_out3<-remap(mapdata=map_data, #設計流向地圖
title="我是標題", #設定標題
subtitle="我是副標題", #設定副標題
theme=get_theme(theme="none", #設定主題
lineColor="blue", #設定線條顏色
backgroundColor="white", #設定背景顏色
titleColor="black", #設定標題顏色
borderColor="grey", #設定地區邊界顏色
regionColor="SandyBrown") #設定地區顏色
)
plot(map_out3)
但是個人習慣,還是比較喜歡先將主題定義好並命名,然後在執行圖表程式碼的時候直接飲用,這樣比較利於後期主題的微調:
mytheme<-get_theme(theme="none", #設定主題
lineColor="blue", #設定線條顏色
backgroundColor="white", #設定背景顏色
titleColor="black", #設定標題顏色
borderColor="grey", #設定地區邊界顏色
regionColor="Bisque")
map_out4<-remap(mapdata=map_data,
title="我是標題",
subtitle="我是副標題",
theme=get_theme(theme="none"))
plot(map_out4)
當然如果將資料框中的資料兩列調換,那麼地圖就可以做成流入圖。
origin<- c("beijing","tianjin","shenyang","dalian","zhengzhou") #終點
destination<- rep("dalian",length(destination)) #起點
#合成數據框格式的起終點資料
map_data<- data.frame(origin,destination)
map_out5<-remap(mapdata=map_data,
title="我是標題",
subtitle="我是副標題",
theme=get_theme(theme="Bright"))
plot(map_out5)
如果想要儲存該HTML物件,需要設定臨時目錄:
setwd("D:/R/Rscript") #儲存圖片的位置,不做修改預設為R的工作路徑
options(remap.js.web=T) #動態網頁圖儲存命令
plot(map_out5) #儲存的同時自動呼叫瀏覽器視窗
其實以上所有圖表都是帶有動態互動效果的,這裡我錄製了一小段兒視訊,大家可以看下:
往期精彩內容整理合集:
相關課程推薦
R語言視覺化在商務場景中的應用:
☟☟☟ 猛戳閱讀原文,即刻加入課程。