Graphviz ---如何使边缘不相互交叉; 选择自循环边缘位置

osk*_*rkv 8 graphviz

我有以下dotfile:

digraph finite_state_machine {                                                                                                                                                                                  
    pad=0.2;
    {
        rank=same;
        node [shape = doublecircle]; q_3;
        node [shape = circle];
        q_1 [ label = <<b><i>q<sub>1</sub></i></b>> ];
        q_2 [ label = <<b><i>q<sub>2</sub></i></b>> ];
        q_3 [ label = <<b><i>q<sub>3</sub></i></b>> ];
        q_1 -> q_1 [ label = <<b><i>^a</i></b>> ];
        q_1 -> q_2 [ label = <<b><i>a</i></b>> ];
        q_2 -> q_2 [ label = <<b><i>^b</i></b>> ];
        q_2 -> q_3 [ label = <<b><i>b</i></b>> ];
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出: 输出图像

我希望自循环位于节点之上,而不是越过其他边.并且,如果可能的话,更多循环循环.我怎样才能做到这一点?

我希望它看起来像这样:

mar*_*pet 14

您可以使用端口/罗盘点:

q_1:e -> q_1:w [ label = <<b><i>^a</i></b>> ];
q_2:e -> q_2:w [ label = <<b><i>^b</i></b>> ];
Run Code Online (Sandbox Code Playgroud)

graphviz与循环循环

或使用nw/ ne作为罗盘点:

事件循环器循环