如何最大程度地减少Diagrammer上的边缘交叉? (MinQuit和MaxIter)

时间:2018-09-28 20:22:58

标签: r diagrammer

我正在使用Diagrammer从data.frame中创建具有节点和边的图。
当图很大时,自动定位不是很好,它会形成过多的交叉,我还需要手动定位标签以避免重叠。

我一直在搜索文档,并找到了对参数的引用,例如 MinQuit,MaxIter,minlen和maxlen。 还有其他参数或技巧吗?

能告诉我如何使用它们吗? 我也想知道如何控制样条曲线的曲率参数。

这是我的代码的简化版本:

nodes <-   create_node_df(  n=length(nodesd), label=nodesd,  width=0.5, shape="circle",
penwidth=1, style = "filled" ) 
edges <- create_edge_df(from = factor(myDT$from, levels=nodesd), to = factor(myDT$to, levels=nodesd),
rel = "leading_to", label=myDT$lab, penwidth=myDT$wid)  
graph <-   create_graph(  nodes_df = nodes, edges_df = edges)
graph <- add_global_graph_attrs(graph, "layout", "dot", "graph")
graph <- add_global_graph_attrs(graph, "splines","spline", "graph")
graph <- add_global_graph_attrs(graph, "rankdir", "TB", "graph")  
render_graph(graph)

我还尝试了点,整齐,twopi,圆角布局和弯曲而不是样条曲线。

Visnetwork会重新分配节点以最大程度地减少问题,但不允许我将图表导出为矢量图形。

在这里您可以看到节点数更少但仍然存在问题的结果。如果数字更大,结果将是一团糟。

rplot rplot02

您可以尝试以下玩具示例:

myDT <- data.frame(from=c("a", "g", "z", "b", "b", "c", "d", "d", "e", "f", "f", 
       "a", "f", "h", "h", "k", "k", "g", "y"), to=c("c", "d", "f", "e", "f","a", "a", "a", "b", 
       "b",  "f", "b", "c", "k","e", "h", "a", "e", "z"), lab=1:19)
nodesd <- c("a", "b", "c", "d", "e", "f", "g", "h", "k", "y", "z")

0 个答案:

没有答案