本文介紹創建交互式網絡圖的兩個關鍵R包。這些軟件包包括:
- VisNetwork(Almende B.V.、Thieurmel和Robert 2017)。使用vis.js javascript庫(http://visjs.org/).)創建交互式網絡可視化。
- networkD3(Allaire等人。(2017年)。從R創建D3 JavaScript網絡圖。
您將瞭解如何:
- 創建經典的交互式網絡圖
- 創建交互式桑基圖,這對網絡流非常有用。
- 可視化、交互性、分類和迴歸樹
加載演示數據集和R包
我們將使用phone.call2數據[在navdata R包中],該數據是一個列表,其中包含在phone.call數據的@ref(network-visual-essentials)一章中準備的節點和邊列表。
首先加載tidyverse R包和phone.call2演示數據集:
注意,navdata包沒有了。我的數據從這裡下的(https://github.com/kassambara/navdata/blob/master/data/phone.call2.rda),放在工作目錄下。
<code>library(tidyverse)
load("phone.call2.rda")
nodes edges /<code>
networkD3 R包
關鍵功能
可用於輕鬆創建交互式Sankey圖,以及其他網絡佈局,如樹狀圖、放射狀和對角狀網絡。
關鍵的R函數和選項
關鍵R函數:
forceNetwork():創建D3 JavaScript強制定向網絡圖
<code>forceNetwork(Links, Nodes, Source, Target,
Value, NodeID, Nodesize, Group)/<code>
關鍵參數:
- Links:邊緣列表。邊ID應從0開始。
- Nodes:節點列表。節點ID應從0 開始。
- Source, Target:邊數據中的列的名稱,分別包含網絡源和目標變量。
- Value:邊數據中包含邊的權重值的列的名稱。用於指示鏈接的寬度。
- NodeID:節點數據中包含節點ID的列的名稱。用於標記節點。
- Nodesize:節點數據中的列的名稱,其中包含一些用於改變節點半徑的值。
- Group:節點數據中的列的名稱,指定每個節點的組。
準備節點和邊數據
如上所述,Nodes和Edges列表中的ID應該是從0開始的數值。這可以通過從兩個數據框中的現有ID減去1來容易地完成。
1.準備節點和邊數據:
<code>nodes_d3 /<code>
<code>edges_d3 /<code>
2.創建交互網絡:
<code>library(networkD3)
forceNetwork(
Links = edges_d3, Nodes = nodes_d3,
Source = "from", Target = "to", # so the network is directed.
NodeID = "label", Group = "id", Value = "weight",
opacity = 1, fontSize = 16, zoom = TRUE
)/<code>
請注意,每組都有一種顏色。在這裡,當我們指定列“id”作為節點組值時,我們為每個單獨的節點指定了不同的顏色。
創建桑基圖
您可以創建d3樣式的桑基圖。桑基圖是電話呼叫數據的一個很好的顯示。數據中沒有太多的節點,因此更容易將電話呼叫的數據流可視化。
創建Sankey圖:
<code>sankeyNetwork(
Links = edges_d3, Nodes = nodes_d3,
Source = "from", Target = "to",
NodeID = "label", Value = "weight",
fontSize = 16, unit = "Letter(s)")/<code>
network3D包中還有其他分層佈局,用於可視化樹狀圖形。在下面的示例中,我們首先使用USArrests數據集的示例計算分層聚類:
<code>set.seed(123)
hc % sample_n(15) %>%
scale() %>% dist() %>%
hclust(method = "complete")/<code>
其他網絡佈局
- dendroNetwork:
<code>dendroNetwork(hc, fontSize = 15)/<code>
其他備選方案包括:
- radialNetwork:
<code>radialNetwork(
as.radialNetwork(hc), fontSize = 15
)/<code>
- diagonalNetwork:
<code>diagonalNetwork(
as.radialNetwork(hc), fontSize = 15
)/<code>
VisNetwork R Package
主要功能
- 創建交互式網絡圖。
- 可以根據需要自定義節點和邊。
- 可直接交互地可視化用於以igraph包生成的網絡。
- 可用於可視化使用rpart包生成的遞歸分區和迴歸樹。
- 可以將圖像和圖標用於節點形狀。
- 支持igraph佈局
關鍵R函數和選項
關鍵R函數
<code>visNetwork(
nodes = NULL, edges = NULL,
width = NULL, height = NULL,
main = NULL, submain = NULL, footer = NULL
)/<code>
關鍵參數:
nodes: 節點列表信息. 應至少包含列“id”。有關控制節點的更多選項,請參見visNodes()。數據中還可以包括其他列,例如:
- “id”:節點的ID,邊中需要的信息
- “label”:節點的標籤
- “group”:節點的組。組可以使用visGroups()來配置。
- “value”:節點大小
- “title”:節點的工具提示。
- …
edges:邊列表信息。至少需要列“from”和“to”。有關控制邊的更多選項,請參見visEdges()。“from”:邊開始的節點id
- “to”:邊末端的節點
- “label” : 邊的標籤
- “value”: 節點大小
- “title”: 節點的工具提示
- …
創建經典網絡圖
請注意,該函數使用節點列表中的“label”列繪製節點的標籤。您可以移動節點,圖形將使用一種算法來保持節點的適當間距。還可以放大和縮小打印,並將其四處移動以重新居中。
要始終保持相同的網絡,可以使用函數visLayout(randomSeed = 12):
<code>library("visNetwork")
visNetwork(nodes, edges) %>%
visLayout(randomSeed = 12)/<code>
請注意,visNetwork可以使用igraph佈局,其中包括大量可能的佈局。您可以使用visIgraph()直接可視化圖形網絡對象。
如果要根據變量控制邊緣的寬度,則應在邊緣列表數據中包含“width”列。您應該手動計算和縮放邊緣寬度。
在下面的R代碼中,我們將通過使用igraph佈局和更改邊緣寬度來自定義visNetwork()輸出。首先在邊緣列表數據框中添加列寬。將最小寬度設置為1:
<code>edges /<code>
創建具有可變邊寬和曲線圖佈局=“layout_with_fr”的網絡圖。
<code>visNetwork(nodes, edges) %>%
visIgraphLayout(layout = "layout_with_fr") %>%
visEdges(arrows = "middle") %>%
visLayout(randomSeed = 1234)/<code>
如上所述,您可以可視化使用rpart包生成的分類和迴歸樹。
關鍵函數:
visTree() [visNetwork版本>=2.0.0]。例如,要可視化分類樹,請鍵入以下R代碼:
<code># Compute
library(rpart)
res # Visualize
visTree(res, main = "Iris classification Tree",
width = "80%", height = "400px")/<code>
閱讀更多 濤哥的醫學與生信之旅 的文章
關鍵字: JavaScript Links 可視化技術