本文介绍创建交互式网络图的两个关键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 可视化技术