Как минимизировать пересечения ребер в Diagrammer?(MinQuit и MaxIter) - PullRequest
0 голосов
/ 28 сентября 2018

Я использую 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)

Я также попробовал макеты точек, neato, twopi, circo и изогнутые вместо сплайнов.

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")
...