R/Javascript:网络的折叠和展开

5

我正在使用R编程语言。

我有以下图形网络数据:

library(igraph)
library(visNetwork)

from <- c("Boss", "TeamA", "TeamA", "TeamA", "SubteamA1", "SubteamA1", "SubteamA1", "SubteamA2", "SubteamA2", "SubteamA2", "SubteamA3", "SubteamA3", "SubteamA3")
to <- c("TeamA", "SubteamA1", "SubteamA2", "SubteamA3", "employee1", "employee2", "employee3", "employee4", "employee5", "employee6", "employee7", "employee8", "employee9")
a1 = data_frame <- data.frame(from, to)


from <- c("Boss", "TeamB", "TeamB", "TeamB", "SubteamB1", "SubteamB1", "SubteamB1", "SubteamB2", "SubteamB2", "SubteamB2", "SubteamB3", "SubteamB3", "SubteamB3")
to <- c("TeamB", "SubteamB1", "SubteamB2", "SubteamB3", "employee10", "employee11", "employee12", "employee13", "employee14", "employee15", "employee16", "employee17", "employee18")
a2 = data_frame <- data.frame(from, to)


final = rbind(a1, a2)

我将它转换成了一个图形网络,并进行了可视化:
# Convert the data frame to an igraph object
g <- graph_from_data_frame(final, directed=FALSE)

# Plot the graph
plot(g)

# Optional visualization
visIgraph(g)

visIgraph(g) %>%
  visHierarchicalLayout(direction = "LR") %>%
  visInteraction(navigation = "zoom") %>%
  visInteraction(navigation = "drag") %>%
  visOptions(selectedBy = "to", 
             highlightNearest = TRUE, 
             nodesIdSelection = TRUE) 

enter image description here

我的问题: 我一直在尝试找到一种方法,使得当您运行图表时,它只显示屏幕上的一个节点(老板节点) - 当您单击老板节点时,它展开为三个节点(老板,A团队,B团队),如果您点击“ A团队”,它将展开为子团队…但如果您双击,则会折叠回上一个层次。

我能找到的最接近这样的是这里:https://github.com/datastorm-open/visNetwork/issues/307

但是否有更简单的方法在R/javascript中实现呢?最终输出应该是一个(独立的)HTML文件,可以离线查看。

谢谢!

注:

2个回答

2

一个选项是使用visOptionscollapse参数:

: 自定义选项。只是一个布尔值或命名列表。使用双击折叠/展开节点。在dev中。

这样可以在双击节点时折叠。您可以更改形状,以使其在折叠时具有不同的形状。以下是一些可重现的代码:

library(igraph)
library(visNetwork)

visIgraph(g) %>%
  visInteraction(navigation = "zoom") %>%
  visInteraction(navigation = "drag") %>%
  visOptions(collapse = list(enabled = TRUE, keepCoord = TRUE, clusterOptions = list(shape = "circle"))) 

使用 reprex v2.0.2 在2023年1月30日创建

当点击您的老板节点时:

enter image description here

或者比如在TeamA中:

enter image description here


  1. 是否可以删除每个节点上的“cluster”标签?

您可以像这样添加 label = FALSE

visIgraph(g) %>%
  visInteraction(navigation = "zoom") %>%
  visInteraction(navigation = "drag") %>%
  visOptions(collapse = list(enabled = TRUE, keepCoord = TRUE, clusterOptions = list(shape = "circle", label = FALSE)))

在TeamB上的示例:

enter image description here


@ Quinten:非常感谢您的回答!我在代码中添加了“%>% visPhysics(enabled = FALSE)”,网络图就不再“摇晃”了。 - stats_noob
我有一些问题: - stats_noob
  1. 当您折叠一个节点时,是否可以使节点的大小(即半径)与被吞噬的子节点数量成比例?
- stats_noob
嗨@stats_noob,我为你的第一个问题添加了一些代码。我不确定如何实现你的第二个问题。抱歉。 - Quinten
@ Quinten;我已经接受了你的答案。再次感谢你! - stats_noob
显示剩余2条评论

1

你可以尝试

  • 从GitHub安装图表布局特性:
devtools::install_github("timelyportfolio/networkD3@feature/d3.chart.layout")

这使得{networkD3}的一些布局可以折叠(参见此SO帖子)。 示例:

## devtools::install_github("timelyportfolio/networkD3@feature/d3.chart.layout")
library(networkD3)

hc <- hclust(dist(USArrests), "ave")

hierNetwork(as.treeNetwork(hc), 
            type = 'cluster.cartesian', 
            zoomable = TRUE,
            collapsible = TRUE
            )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接