我正在使用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会重新分配节点以最大程度地减少问题,但不允许我将图表导出为矢量图形。
在这里您可以看到节点数更少但仍然存在问题的结果。如果数字更大,结果将是一团糟。
您可以尝试以下玩具示例:
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")