天天看點

R語言實作voronoi treemap可視化1 任務布置過程2 voronoi treemap簡介3 voronoi treemap的R語言可視化實作

今天帶來一篇承諾蝦神的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

,我後續會将代碼放到上面。

繼續閱讀