Размещайте узлы явно с помощью visNetwork (или альтернативы) - PullRequest
0 голосов
/ 02 октября 2018

Как я могу явно разместить nodes на графике visNetwork?

Или: Как я могу воссоздать эту графику в R, используя visNetwork или альтернативу?

enter image description here

Справочная информация: Конечная цель состоит в том, чтобы представить Диаграммы причинно-следственных связей исходя из Vensim файлы.Явное размещение узлов - это только первый (решающий) шаг, потому что в диаграммах причинно-следственных связей визуальное отображение узлов является частью информации (в отличие от общей теории графов).Так что, если у кого-то есть советы по более широкой картине, иначе.«Приведя моделирование причинно-следственной петли к R», я буду более чем счастлив.

То, что я пробовал:

library("visNetwork")

nodes <- data.frame(id = 1:3, label = c("one", "two", "three"))
edges <- data.frame(from = c(1,1,2), to = c(2,3,1))

visNetwork(nodes, edges, width = "100%", title = nodes$labels, stringsAsFactors = FALSE) %>% visEdges(arrows = "to")

, что изображает что-то вроде (точная схема изменится,из-за случайного начального числа):

enter image description here

При помощи вопросов и ответов от здесь Я попытался разместить узлы вручную, установив x иy значений.

library("visNetwork")

nodes <- data.frame(id = 1:3, label = c("one", "two", "three"), x = c(0,1,2), y = c(0,1,2))
edges <- data.frame(from = c(1,1,2), to = c(2,3,1))

visNetwork(nodes, edges, width = "100%", title = nodes$labels, stringsAsFactors = FALSE) %>% visEdges(arrows = "to")

какие графики:

enter image description here

.. и я действительно не понимаю, каково соответствиемежду x, y и размещением на экране ..

Также я не смог найти ничего в документах для visLayout.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Использование ggraph вместо visNetwork упрощает вещи.

library(ggraph)
library(igraph)

g <- make_graph(edges = c(1,2,2,1,1,3))
V(g)$name <- c('one', 'two', 'three')

ggraph(g, layout = 'manual', node.positions = data.frame(x = c(1,1,2), y = c(2,1,2.1))) + 
  geom_edge_arc(aes(start_cap = label_rect(node1.name),
                    end_cap = label_rect(node2.name)),
                 angle_calc = 'along',
                 label_dodge = unit(2.5, 'mm'),
                 arrow = arrow(length = unit(4, 'mm'))) + 
  geom_node_text(aes(label = name, x = x, y = y))

Это графики enter image description here

, что (кроме линий сетки и цветов)что я искал.

0 голосов
/ 03 октября 2018

Получается, что аргументы x и y не работают.Вот решение:

library("visNetwork")

nodes <- data.frame(id = 1:3, label = c("one", "two", "three"))
edges <- data.frame(from = c(1,1,2), to = c(2,3,1))

coords <- as.matrix(data.frame(x = c(0,1,2),
                               y = c(0,1,2),
                               stringsAsFactors = FALSE))

visNetwork(nodes, edges, width = "100%", title = nodes$labels) %>%
    visNodes() %>%
    visOptions(highlightNearest = TRUE) %>%
    visInteraction(navigationButtons = TRUE,
                   dragNodes = TRUE, dragView = TRUE,
                   zoomView = FALSE) %>%
    visEdges(arrows = 'to') %>%
    visIgraphLayout(layout = "layout.norm", layoutMatrix = coords)

Для истории см. Также здесь .Возможно, эти ссылки могут быть полезны для того, чего вы хотите достичь: причинный эффект и plot.CLD

...