1

如何将节点 0 的位置固定在最右边,将节点 5 固定在最左边(5 可以,0 呢?

这是我在 R 中的可重现代码:

library(visNetwork)
nodes <- data.frame(id = 0:5,label=0:5)
edges <- data.frame( from=c(0,0,0,1,2,3,1,2,4),to=c(2,3,5,5,5,5,3,4,5))
visNetwork(nodes, edges)%>% visHierarchicalLayout(direction = "LR")  %>% visEdges(arrows = "to") 

输出: 在此处输入图像描述

Mor解释:我需要形成一个可读的图形,我的数据集中的一个节点总是在左边(即完成节点,这里显示为5),一个在右边(即开始节点,显示为0)。我知道可能可以使用 randomseed 并尝试很多组合,但我正在寻找一个更好的解决方案,通过它们的 id 将两个节点的位置固定到最左边和最右边。

4

1 回答 1

3

我对这个包不太熟悉。但是试试这个:

library(visNetwork)

nodes <- data.frame(id = 0:5,label=0:5)
edges <- data.frame( from=c(0,0,0,1,2,3,1,2,4),to=c(2,3,5,5,5,5,3,4,5))

visNetwork::visIgraphLayout(visNetwork(nodes, edges) %>% visEdges(arrows = "to") %>%
                              visEvents(selectNode = "function(properties) {
      alert('selected nodes ' + this.body.data.nodes.get(properties.nodes[0]).id);}"))

然后,您可以随心所欲地手动拖动和放置节点,并将其放置在您喜欢的任何位置。让我知道此解决方法是否对您有好处。这是我按照您在问题中提出的方式提出的最终结果:

在此处输入图像描述 编辑:对不起,我忘记了边缘的方向。我已经添加了它们。

于 2020-02-27T03:17:06.450 回答