Graphviz ---随机节点顺序和通过标签的边

osk*_*rkv 3 graphviz

我有以下点文件:

digraph finite_state_machine {
    {
        rank=same;
        node [shape = doublecircle]; q_5;
        node [shape = circle];
        q_1 -> q_2 [ label = "." ];
        q_1 -> q_2 [ label = "\epsilon" ];
        q_2 -> q_1 [ label = "\epsilon" ];
        q_2 -> q_3 [ label = "a" ];
        q_3 -> q_4 [ label = "^\wedge a" ];
        q_3 -> q_4 [ label = "\epsilon" ];
        q_4 -> q_3 [ label = "\epsilon" ];
        q_4 -> q_5 [ label = "b" ];
    }
}
Run Code Online (Sandbox Code Playgroud)

我的印象是节点会按照提到的顺序出现.但顺序对我来说似乎是随机的.我希望订单从左到右依次为订阅.此外,边缘穿过标签,我该如何避免?

这是当前图片: 电流输出

mar*_*pet 6

Graphviz确实根据彼此之间的边缘布置节点,而不是按照外观的顺序.如果您希望边缘不影响任何节点的位置,可以通过添加来完成此操作constraint=false.

因此,这个图:

digraph finite_state_machine {
  pad=0.2;
    {
        rank=same;
        node [shape = doublecircle]; q_5;
        node [shape = circle];
        q_1 -> q_2 [ label = "." ];
        q_1 -> q_2 [ label = "\epsilon", constraint=false ];
        q_2 -> q_1 [ label = "\epsilon", constraint=false ];
        q_2 -> q_3 [ label = "a" ];
        q_3 -> q_4 [ label = "^\wedge a" ];
        q_3 -> q_4 [ label = "\epsilon", constraint=false ];
        q_4 -> q_3 [ label = "\epsilon", constraint=false ];
        q_4 -> q_5 [ label = "b" ];
    }
}
Run Code Online (Sandbox Code Playgroud)

会得到你:

graphviz输出有限状态机

我必须添加pad,以便没有切断一些标签.