1. 程式人生 > >R語言視覺化——REmap動態地圖

R語言視覺化——REmap動態地圖

640?wx_fmt=gif作者簡介Introduction

杜雨:EasyCharts團隊成員,R語言中文社群專欄作者。

興趣方向為:Excel商務圖表,R語言資料視覺化,地理資訊資料視覺化。

個人公眾號:資料小魔方(微信ID:datamofang) ,“資料小魔方”創始人。

往期回顧

640?wx_fmt=png

今天開始,要跟著大家學習一個新的視覺化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

執行完成之後,瀏覽器視窗會自動呈現動態圖表效果:

640?wx_fmt=jpeg

其實仔細看以上程式碼,與ggplot的地圖程式碼相比,要簡單很多,資料集也很簡單(最重要的直接支援地點名稱而不需要經緯度資料),當然這些便利性主要歸功於它的底層程式碼是呼叫Echarts專案,地理位置資訊有百度地圖的強大系統支援。

另外兩個主題:

Dark主題:

map_out1<-remap(mapdata=map_data,title="我是標題",subtitle="我是副標題",theme =get_theme(theme="Dark"))

plot(map_out1)

640?wx_fmt=jpeg

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)

640?wx_fmt=jpeg

以上是該函式內建的三款主題,當然如果你要想自定義主題的話,也是可以的,但是需要將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)

640?wx_fmt=jpeg

但是個人習慣,還是比較喜歡先將主題定義好並命名,然後在執行圖表程式碼的時候直接飲用,這樣比較利於後期主題的微調:

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)

640?wx_fmt=jpeg

如果想要儲存該HTML物件,需要設定臨時目錄:

setwd("D:/R/Rscript")      #儲存圖片的位置,不做修改預設為R的工作路徑

options(remap.js.web=T)    #動態網頁圖儲存命令

plot(map_out5)             #儲存的同時自動呼叫瀏覽器視窗

640?wx_fmt=png

其實以上所有圖表都是帶有動態互動效果的,這裡我錄製了一小段兒視訊,大家可以看下:

往期精彩內容整理合集:

相關課程推薦

R語言視覺化在商務場景中的應用:

640?wx_fmt=jpeg

☟☟☟ 戳閱讀原文,即刻加入課程。