边缘连接重叠且不 space 出来

edge connections overlap and don't space out

我也在尝试看看是否可以使用 Dot 编程语言将其应用到我的一个旧项目中。

任务很简单:轻松创建高质量图表。

不幸的是,虽然实现图表的细节相当容易,但我最终不得不花费大量时间来调整布局。 此外,我不太清楚我的指令顺序如何影响我的图表,但实际上看起来将代码的最后一条指令放在开头会产生完全不同的输出!

代码如下:

digraph {
TOP [shape=doublecircle]
TOP->TOP->{rank=same a->b->c->b->a}
a:s->c:s
a:nw->a:sw
c:ne->c:se
b:s->b:s
}

所以。首先,我终于通过排名掌握了'get nodes to be on the same horizontal/vertical line'...

我还解决了边缘进行愚蠢互连的问题(所有免费 space 在图形下方用于连接,并且边缘以笨拙的方式结束 zig-zagging 通过整个图形并重叠一切?)使用方向指示器“:e”等(我相信它们被称为路线......),但看起来 graphviz 没有以聪明的方式使用它们,因为结果对我来说看起来很有趣。

这是输出,我如何得到它以避免 边缘重叠 并为将来制作足够的 space (long) 标签?

(使用 dot -Tpng test.dot -o test.png

(另外,我也需要在底部添加一个 c->a 边,但是添加一个 "normal" 的方式毁了一切)

您可以根据需要使用不可见节点 "re-route" 您的边缘(根据以下评论进行编辑):

digraph
{
    /* layout */
    // node width to create space for longer labels
    node [ width = 1.75 ];
    { rank=same; a; b; c }

    /* nodes */
    t [ label = "TOP", shape = doublecircle, width = 1];
    a [ label = "short" ];
    b [ label = "medium" ];
    c [ label = "rather  l o n g"]
    // invisible nodes to 're-route' the edges
    x [ style = invis, shape = point, width = 0 ];
    y [ style = invis, shape = point, width = 0 ];

    /* edges */
    t -> t;
    t -> { a b c }
    t -> { a b c } [dir = back ];      // added for reverse arrows
    a -> b -> c -> b -> a;
    a:nw -> a:sw;
    c:ne -> c:se;
    b:s -> b:s;
    // put the invisible nodes at the desired places with invisible edges
    b -> x -> y [ style = invis ];
    // edges to invisible nodes must not have heads
    c:sw -> x [ arrowhead = "none" ];
    x -> a:se;
    a:s ->  y [ arrowhead = "none" ];
    y -> c:s;
}

产量