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

Graphviz 如何使边缘不相互交叉;选择自循环边位置,graphviz,Graphviz,我有以下点文件: digraph finite_state_machine { pad=0.2; { rank=

我有以下点文件:

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>> ];
    }
}
有向图有限状态机{
pad=0.2;
{
等级=相同;
节点[形状=双圆];q_3;
节点[形状=圆];
q_1[标签=];
q_2[标签=];
q_3[标签=];
q_1->q_1[标签=];
q_1->q_2[标签=];
q_2->q_2[标签=];
q_2->q_3[标签=];
}
}
我得到以下输出:

我希望自循环位于节点的顶部,而不是交叉其他边。如果可能的话,还有更多的循环。我怎样才能做到这一点

我希望它看起来像这样:

您可以使用:

q_1:e->q_1:w[label=];
q_2:e->q_2:w[标签=];

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


谢谢你的努力,但我不喜欢结果。编辑了我的帖子,加入了我想要的图片。或者我可以使用ne和nw作为方向/点。我明天会试试。当然你可以使用西北/东北方向作为指南针点,我添加了一个修改过的示例
q_1:e -> q_1:w [ label = <<b><i>^a</i></b>> ];
q_2:e -> q_2:w [ label = <<b><i>^b</i></b>> ];