R语言 如何使用 networkD3 添加轴标签
networkD3是一个用于创建D3(数据驱动文档)网络图的R包。netwrorkD3是使用htmlwidget包构建的。正如名字所说的网络,这个图可以以节点和边的数据框架的形式构建。然后它将进行物理模拟,以决定三维中最有利的图。它被用来创建D3 Javascript网络、树、树枝图、Sankey图等。
在R包中,已经有很多可视化库存在。例如,ggplot、Plotly、igraph等。但并不是所有的库都是用来创建网络型图的,而且也不是在三维图中。这就是为什么要制作它的主要目的。
语法: sankeyNetwork( Links, Nodes, Source, Target, Value, NodeID, NodeGroup = NodeID, LinkGroup = NULL, units = "", colorScale = NULL, fontSize = 7, fontFamily = NULL, nodeWidth = 15, nodePadding = 10, margin = NULL, height = NULL, wide = NULL, iterations = 32, sinksRight = TRUE )
参数 。
- Links: 数据帧代表源和目标(节点)之间的链接。
- Nodes: 数据帧包含节点属性
- Source: 源节点的字符串
- Target :目标节点的字符串
- Value: 节点间距离值的字符串
- NodeID: 节点名称
- NodeGroup: 节点中的节点ID的字符串
- **LinkGroup ** :组间链接的字符串
- Units : 字符串,用于指定物理单位(值
- colourscale: 指定颜色比例
- nodeWidth: 节点的宽度
- nodePadding: 节点之间的padding。
- sinksRight: 布尔值。如果它是 “真”,最后一个节点会移动到图形的右边界。
创建一个带有标题、副标题和标签的简单sankeyNetwork图
第1步: 在Rstudio中导入必要的库。
library(dplyr)
library(networkD3)
library(htmlwidgets)
library(manipulateWidget)
library(htmltools)
第2步: 以源-目标数据框架的格式创建网络数据。
- 在这里,我们将A->D、B->E和C->F节点连接起来,并在每个链接上分配3个值。最终的表将看起来像myDataframe表的图像。
- 节点表包含了每个节点条目的唯一性。
- IDsource和IDtarget是源节点和目标节点的字符串形式。
- 但我们要用’-1’来减去,这样它就可以从第0个字符开始,比如A节点是0,B节点是1,以此类推。
# Create values
Source_Node <- c("A","B","C","A","B",
"C","A","B","C")
Target_category <- c("D","E","F","D",
"E","F","D","E","F")
Frequency <- c(1,2,3,4,5,6,7,8,9)
myDataframe <- data.frame(Source_Node,
Target_category,Frequency)
# Node table
nodes <- data.frame(name=c(as.character(myDataframeSource_Node),
as.character(myDataframeTarget_category))
%>% unique())
# IDsource and IDtarget string character format
myDataframeIDsource=match(myDataframeSource_Node,
nodesname)-1
myDataframeIDtarget=match(myDataframeTarget_category,
nodesname)-1
输出 。
第3步: 创建一个简单的Sankey网络图。
按照上述sankeyNetwork的语法,我们要指定一些参数来生成我们的输出。
graph1 <- sankeyNetwork(Links = myDataframe,
Nodes = nodes,
Source = "IDsource",
Target = "IDtarget",
Value = "Frequency",
NodeID = "name",
sinksRight=FALSE)
# view graph
graph1
输出 。
SankeyNetwork Graph
第4步: 在图1中添加标题和副标题。
- 为了指定一个标题,我们可以使用htmlwidgets工具中的prependContent函数。
- 创建两个带有文本描述和样式的h1和h2标签。
- 在我们上面的graph1中预置这些标签,把所有这些标签放在pependContent函数中。
graph2 <- htmlwidgets::prependContent(graph1,
htmltools::tagsh1(
"GeeksForGeeks Title",
style="text-align:center;
color:#007500; "),
htmltools::tagsh2(
"GeeksForGeeks Subtitle",
style="color:#00D100;
text-align:center;"))
# view graph
graph2
输出 。
带有标题和副标题的SankeyNetwork图表
第5步: 在networkGraph中添加左和右标签。
- 创建左标签为leftTx,右标签为rightTx。
- 现在,为了结合leftTx、rightTx和graph2,使用来自manipulatewidget库的combinedWidget。
- combineWidget将graph、title、left-column、right-column和row-number作为参数,并将所有这些实例合并成一个。
语法: combineWidgets( list = NULL, nrow = NULL, ncol = NULL, title = NULL, rowsize = 1, colsize = 1, byrow = TRUE, titleCSS = " ", header = NULL, footer = NULL, leftCol = NULL, rightCol = NULL, width = NULL, height = NULL )
# create left-right label
leftTx = tagsdiv(
style="max-width: 30vw; height: 100%;
display: flex; align-items: center;
justify-content: center;",
tagsp("This is left side label"))
rightTx = tagsp("This is right side label",
style="max-width:30vw")
# final output with label. combineWidget
# can be use by manipulateWidget.
graph3 <- combineWidgets(graph2,
title = tagsh1("With left-right label",
style="text-align:center;color:#007500;"),
leftCol = leftTx,
rightCol = rightTx,
nrow = 1)
# view graph
graph3
输出 。
输出时有左和右标签