установить фиксированное местоположение нескольких указанных c узлов в visNetwork - PullRequest
1 голос
/ 27 февраля 2020

Как я могу исправить положение узла 0, чтобы он был справа, а 5 - слева, (5 нормально, как насчет 0)?

Вот мой код reproducibale в 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") 

Вывод: enter image description here

Mor объяснение: мне нужно сформировать читаемый график, чтобы один узел в моем наборе данных всегда был слева (т.е. конечный узел sh, обозначенный здесь как 5) и один справа (т. е. начальный узел, обозначенный как 0). Я знаю, что возможно использовать случайное семя и попробовать его для множества комбинаций, но я ищу лучшее решение, которое фиксирует позиции двух узлов по их идентификаторам в крайнем левом и правом.

1 Ответ

3 голосов
/ 27 февраля 2020

Я не очень знаком с пакетом. Но попробуйте следующее:

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);}"))

Затем вы можете вручную перетаскивать и размещать узлы так, как вам нравится, и где угодно. Дайте мне знать, если этот обходной путь полезен для вас. Это конечный результат того, что я расположился так, как вы задали в своем вопросе:

enter image description here РЕДАКТИРОВАТЬ: Извините, я забыл о направлении краев. Я добавил их.

...