Search code examples
rlayoutnodesgraph-visualizationvisnetwork

Using visNetwork to dynamically update nodes in R


the below snapshot visual is created using the "visNetwork" package. My requirement here is that I have to hard code the edges and also after using visHierarchicalLayout(), I am not able to see them in order, Please help me with a dynamic approach such that no matter how many numbers, I get consecutive numbers in order without hard code. Thanks and please help.

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

Snapshot visual


Solution

  • Using level attribute does the job, it aligns the network based on the order given.

    library(visNetwork)
    nodes <- data.frame(id = 1:7, label = 1:7, level = 1:7)
    # Extract the id
    num <- nodes$id
    # Repeat the numbers
    num2 <- rep(num, each = 2)
    # Remove the first and last numbers
    num3 <- num2[c(-1, -length(num2))]
    #Create a data frame
    edges <- as.data.frame(matrix(num3, ncol = 2, byrow = TRUE))
    names(edges) <- c("from", "to")
    visNetwork(nodes, edges, width = "100%") %>% 
    visEdges(arrows = "to") %>% 
    visHierarchicalLayout()