R語言實現voronoi treemap可視化

今天帶來一篇承諾蝦神的R語言可視化博客。關於voronoi treemap的可視化。


1 任務佈置過程

感謝蝦神,刀爺和魄爺實名出鏡。

事實上這是刀爺看到澎湃美數課發的一篇推送文章其中一張圖產生的疑問,感興趣的可以點擊原文

刀爺問的是如何實現上圖的可視化,這就是任務佈置的由來。

2 voronoi treemap簡介

事實上這個可視化方式我曾經在我博客的資源整理系列介紹過,分別是該系列的第二十篇和第二十一篇,因此我很迅速找到了可以實現的開源代碼庫,鏈接在下面。

R package: voronoiTreemap

d3-voronoi-treemap

這個可視化方式英文爲voronoi treemap。事實上是voronoi圖與矩形樹圖兩種可視化方式的結合。GIS的同學比較熟悉voronoi圖,這個圖就是泰森多邊形。矩形樹圖即爲下圖的形式,可以說是一種複合可視化。

3 voronoi treemap的R語言可視化實現

我博客裏介紹的實現方式有兩種,但是這兩種方式事實上都是基於d3這個javascript可視化大殺器做的。一個直接用javascript編程實現,另一個則是有人封裝成了R包可以直接調用。由於我比較熟悉R語言,所以這裏就以R語言實現可視化進行介紹。當然除此之外github上也有不少其他方式實現的,感興趣的同學可以直接在github上搜索voronoi treemap。

所有R語言可視化的第一步,裝包。

如果不想用最新版,可以直接在cran上裝,使用如下的命令。

install.packages('voronoitreemap')

如果想用最新版,則需要使用devtools安裝。

library('devtools')
install_github('uRosConf/voronoiTreemap')

接下來第二步,跑hello world。這個R包提供了兩個樣例數據,一個是ExampleGDP,另一個是canada。然後這個R包開發是爲了開發R語言的Shiny應用做準備。Shiny是R語言中的web開發包,可以通過R語言實現一個web應用。這因此這個包內置了一個簡單的Shiny app。所以首先先用這個來跑hello world。

vt_app()

當然執行如上的命令以後,瀏覽器會自動打開頁面。

接下來只要在下拉框裏選擇對應的下拉框選項,即可顯示可視化結果。

可以在本地瀏覽器簡單進行交互了。當然這是簡單的hello world探索,下一步我們討論如何使用自己的數據來實現可視化。首先來查看數據結構以及相關函數。這裏的數據結構以ExampleGDP爲例。

這個包的主要函數包括以下幾個。

vt_input_from_df: easy data input as a data frame
vt_export_json: export to json
vt_d3: create an htmlwidget
vt_app: start a shiny to create a Voronoi treemap

第一個函數是將數據框轉換作爲Voronoitreemap的輸入,第二個函數是將輸入函數輸出爲json文件,也就是d3庫可以讀取與可視化的數據。第三個函數是創建html的widget。第四個函數就是創建一個shiny app。這個包對輸入的數據框有具體的要求,必須是特定格式的數據框(也就是與ExampleGDP的數據組織必須完全一樣)。滿足以下要求:

  • h1只有一個類別的總數據;
  • color是16進制的字符串;
  • code是h3對應的簡寫;
  • 所有數據的weight加起來等於100;
  • 數據框變量名與樣例數據一致;
  • 除了weight以外的五列數據必須都是字符型。

我們以中國大陸區域的疫情數據做測試。h1就是China,h2爲東中西部省份,h3爲大陸地區31個省級行政區,weight爲確診病例數據的全國佔比。這裏以約翰霍普金斯大學的數據做示例進行處理。

首先是讀取約翰霍普金斯大學的相關數據,可以直接讀取github上的csv文件。然後提取出大陸地區31個省級行政區,然後做數據類型轉換等前期處理,最後得到一個這樣子的數據框。

最後將數據轉換爲json並可視化即可。

covid19cnjson <- vt_export_json(vt_input_from_df(covid19vtmp))
vt_d3(covid19cnjson)

由於湖北省數據較多,其他省份數據不夠顯著。單純按照東中西的分類不是很準確,這裏選擇排除疫情暴發源地省份的湖北省再進行可視化,結果如圖。

可以發現東部和中部省份相比於西部有更多的確診病例。這個結果也比較好解釋,中部與武漢的聯繫較爲緊密,主要是空間距離上相近。而東部則是中國經濟發達區域,可以描述爲經濟距離近。

這部分的代碼,這裏就放一個截圖,如果想要代碼文件的,可以與我郵件聯繫。或者關注我的github,我後續會將代碼放到上面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章