我想自定义 R 包的折叠功能visNetwork
。
我正在使用R version 3.6.2
,RStudio Version 1.2.5033
和visNetwork version 2.0.9
.
标准行为是双击一个节点后,每个传出路径以及来自该节点的相应节点和关系都折叠到所选节点中。但我想自定义折叠功能,以便不折叠 n 个端节点。
这是一个示例图:
library(dplyr)
library(visNetwork)
nod <- tibble(id = c (1,2,3,4,5,6), label = c("a","b","c","d","e","f"), x= c(0,1,2,3,3,2)*150,y = c(0,0,0,0,-1,1)*150)
# standard behavior
edg <- tibble(id = 1:5, from = c(1,2,3,3,3), to = c(2,3,4,5,6))
edg <- edg %>% mutate(arrows = c("to","to","to","to","to"))
# first solution: under the hood arrows starting from d, e and f and arrow head is at the from-node
edg <- tibble(id = 1:5, from = c(1,2,4,5,6), to = c(2,3,3,3,3))
edg <- edg %>% mutate(arrows = c("to","to","from","from","from"))
##
graph <- visNetwork(nod, edg) %>%
visEdges(smooth = F) %>%
visNodes(fixed = TRUE) %>%
visOptions(collapse = list(enabled = T, keepCoord = T)) %>%
visPhysics(enabled = F) %>%
visLayout(randomSeed = 123)
双击时node b
,我希望它只node c
聚集到node b
endnodesnode d
中,node e
并且node f
仍然未折叠。这个想法是通过双击压缩一个巨大的图形来动态地说明初始节点和结束节点之间的关系,而没有中间的方式。
下面是初始图的图像: 初始图
以及所需的图形之一: Clustered,compressed graph
我的第一个解决方案是在引擎盖下更改末端节点的箭头方向,使箭头指向 fromnode d
和to ,node e
因此从over开始的路径不会在之后继续。此外,我更改了各个箭头的位置,使它们位于起始节点(d,e,f)。因此,图表看起来与所需的折叠行为一样。node f
node c
node a
node b
node c
我想知道是否有像函数这样更聪明的方法:
function(graph, cluster = "node b", other_nodes = c("node c", "node f")) 即执行后,仅在本例中聚类node c
并从图中node f
进入。函数的更多参数可以是= TRUE 或 FALSE,使用 n_hops = number 定义要折叠的集群节点的跃点...。node b
graph
include_last_node
--> 有谁知道折叠时是否可以排除每条路径的最后一个节点?或者定义要折叠的集群节点的跳数(节点)?
提前感谢您的帮助!