我想买这样的东西。

带或不带标签但节点对齐的网络图。我怎么才能得到它呢?
我已经使用了用于其他图形的Diagrammer和Visnetwork包,所以使用相同的包将是一个额外的好处。
library(DiagrammeR)
library(visNetwork)
from=c("A","A","A","A","B","B","B","C","C","D")
to=c("B","C","D","E","C","D","E","D","E","E")
nodesd=c("A","B","C","D","E")使用Diagrammer:
nodes <- create_node_df(  n=length(nodesd), label=nodesd,  width=0.3) 
edges <- create_edge_df(from = factor(from, levels=nodesd), to = factor(to, levels=nodesd), rel = "leading_to")   
graph <- create_graph(nodes_df = nodes, edges_df = edges)
render_graph(graph)

我也尝试过使用set_node_position(),但似乎没有什么不同。
使用Visnetwork
nodes <- data.frame(id=nodesd, label= nodesd ) 
edges <- data.frame(from=from, to =to, length=150)
visNetwork(nodes,edges, width="100%" , height="100%")  %>% 
visNodes(shape = "circle") %>%  visEdges(arrows = 'to', smooth =T)  

正如你所看到的,节点没有对齐。我怎么才能强迫它这么做呢?
我可以手动拖动它们,但如果你有很多图形,这不是你想要做的事情,而且结果也不是很好。

我可以通过添加下面这行代码来垂直地使用visnetwork
  %>%   visHierarchicalLayout()在最后。但它并不能很好地工作,因为许多边缘消失了。

如果我想得到一个水平对齐,我需要将这个添加到节点定义中。
level = c(1,1,1,1,1)

发布于 2017-10-02 21:08:53
我不能用DiagrammeR或visNetwork帮助你,但是用igraph很容易做到。您只需要指定节点的简单布局。您还需要调整边的曲率。我下面的例子有一些工作,但你可以调整它,使其更具艺术性。
library(igraph)
EL = cbind(from, to)
g = graph_from_edgelist(EL)
L = cbind(1:5, 5:1)
CURVE = c(0,0.15, 0.3, 0.45, 0, -0.15, -0.3, 0, 0.15, 0) 
plot(g, layout=L, edge.curved=CURVE)

https://stackoverflow.com/questions/46524490
复制相似问题