首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显式地使用visNetwork放置节点(或其他选项)

显式地使用visNetwork放置节点(或其他选项)
EN

Stack Overflow用户
提问于 2018-10-02 14:51:01
回答 2查看 752关注 0票数 1

如何显式地将nodes visNetwork 放在visNetwork图上?

或:如何使用、或其他方法在R中重新创建该图形?

背景:最终目标是表示来自https://en.wikipedia.org/wiki/Causal_loop_diagram文件的http://vensim.com/。显式地放置节点只是第一个(关键)步骤,因为在因果循环图中,节点的可视化映射是信息的一部分(与一般图论不同)。所以如果有人在大局上有建议的话。“把因果循环图建模到R”,我会非常高兴的。

我试过的是:

代码语言:javascript
复制
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")

这样的情节(由于随机种子的存在,精确的布局会改变):

使用来自这里的Q&A,我尝试通过设置xy值来手动放置节点。

代码语言:javascript
复制
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")

其中的情节:

..and我真的不明白xy和屏幕上的位置之间的对应是什么。

而且,我在文档 for visLayout中找不到任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 14:36:26

使用ggraph而不是visNetwork可以简化事情。

代码语言:javascript
复制
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))

这个情节

这就是我正在寻找的(除了网格线和颜色)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 05:11:52

结果发现,xy are不起作用。这里有一个解决方案:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52610915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档