graphviz中状态机布局的改进

graphviz中状态机布局的改进,graph,graphviz,dot,Graph,Graphviz,Dot,我是graphviz的新手,需要一些帮助来改进布局 对于我的uni类,我必须为有限状态机绘制一个图。代码如下: digraph fsm{ //rankdir=LR; //left-right orientation node[shape=Mrecord] S00[label="{S0|1111111111}"]; S01[label="{S1|0110010101}"]; S02[label="{S2|1000010110}"]; S03[l

我是graphviz的新手,需要一些帮助来改进布局

对于我的uni类,我必须为有限状态机绘制一个图。代码如下:

digraph fsm{
    //rankdir=LR;   //left-right orientation

    node[shape=Mrecord]
    S00[label="{S0|1111111111}"];
    S01[label="{S1|0110010101}"];
    S02[label="{S2|1000010110}"];
    S03[label="{S3|1000010110}"];
    S04[label="{S4|0100010101}"];
    S05[label="{S5|0010110101}"];
    S06[label="{S6|0011001001}"];
    S07[label="{S7|0011001001}"];
    S08[label="{S8|0010100101}"];
    S09[label="{S9|0100100000}"];
    S10[label="{S10|0100100000}"];
    S11[label="{S11|0000000000}"];
    S12[label="{S12|0100100000}"];
    //S0
    S00 -> S00[label="t<8s"];
    S00 -> S01[label="t>8s"];
    S00 -> S09[label="NM"];
    //S1
    S01 -> S01[label="t<1s"];
    S01 -> S02[label="t>1s"];
    S01 -> S09[label="NM"];
    //S2
    S02 -> S02[label="t<6s"];
    S02 -> S03[label="t>6s"];
    S02 -> S09[label="NM"];
    //S3
    S03 -> S03[label="t<7s"];
    S03 -> S04[label="t>7s OR I_NS OR I_HS-F"];
    S03 -> S09[label="NM"];
    //S4
    S04 -> S04[label="t<1s"];
    S04 -> S05[label="t>1s"];
    S04 -> S09[label="NM"];
    //S5
    S05 -> S05[label="t<1s"];
    S05 -> S06[label="t>1s"];
    S05 -> S09[label="NM"];
    //S6
    S06 -> S06[label="t<2s"];
    S06 -> S07[label="t>2s"];
    S06 -> S09[label="NM"];
    //S7
    S07 -> S07[label="t<4s"];
    S07 -> S08[label="t>4s OR I_HS OR I_NS-F"];
    S07 -> S09[label="NM"];
    //S8
    S08 -> S08[label="t<1s"];
    S08 -> S01[label="t>1s"];
    S08 -> S09[label="NM"];
    //S9
    S09 -> S09[label="t<1.5s"];
    S09 -> S10[label="t>1.5s"];
    //S10
    S10 -> S10[label="t<0.5s"];
    S10 -> S11[label="t>0.5s"];
    S10 -> S12[label="t>0.5s"];
    //S11
    S11 -> S11[label="t<0.5s"];
    S11 -> S10[label="t>0.5s"];
    S11 -> S12[label="t>0.5s"];
    //S12
    S12 -> S12[label="t<1.5s"];
    S12 -> S00[label="t>1.5s"];
}
有向图有限状态机{
//rankdir=LR;//左右方向
节点[shape=Mrecord]
S00[label=“{S0 | 1111111}”;
S01[label=“{S1 | 011001001}”;
S02[label=“{S2 | 100001110}”;
S03[label=“{S3 | 100001110}”;
S04[label=“{S4 | 0100010101}”;
S05[label=“{S5 | 001011010}]”;
S06[label=“{S6 | 0011001001}”;
S07[标签=“{S7 | 0011001001}”;
S08[label=“{S8 | 0010101}”;
S09[label=“{S9 | 0100100000}”;
S10[label=“{S10 | 0100100000}”;
S11[label=“{S11 | 0000000000}]”;
S12[label=“{S12 | 0100100000}]”;
//S0
S00->S00[label=“t8s”];
S00->S09[label=“NM”];
//S1
S01->S01[label=“t1s”];
S01->S09[label=“NM”];
//S2
S02->S02[label=“t6s”];
S02->S09[label=“NM”];
//S3
S03->S03[label=“t7s或I_NS或I_HS-F”];
S03->S09[label=“NM”];
//S4
S04->S04[label=“t1s”];
S04->S09[label=“NM”];
//S5
S05->S05[label=“t1s”];
S05->S09[label=“NM”];
//中六
S06->S06[label=“t2s”];
S06->S09[label=“NM”];
//S7
S07->S07[标签=“t4s或I_HS或I_NS-F”];
S07->S09[label=“NM”];
//S8
S08->S08[label=“t1s”];
S08->S09[label=“NM”];
//S9
S09->S09[label=“t1.5s”];
//S10
S10->S10[标签=“t0.5s”];
S10->S12[label=“t>0.5s”];
//S11
S11->S11[label=“t0.5s”];
S11->S12[label=“t>0.5s”];
//S12
S12->S12[label=“t1.5s”];
}
输出如下:

所以是的,它是有效的。但是它很难看

关于如何改进布局有什么建议吗

最让我困扰的是边缘和文本之间的距离很小,从S4-S7到S9,边缘和边缘中的曲线重叠


非常感谢您的任何意见。

您在16个月前提出了这个问题,因此我希望您不再继续学习同一门大学课程。无论如何,为了便于将来参考,将样条曲线的属性设置为
spline=ortho
,并将节点分组为子图(例如:
subgraph SGn{(Sxx defs in here)}
),将花费您很长的时间来清理布局。

您在16个月前问过这个问题,所以我希望你不是还在上同样的大学课程。无论如何,为了便于将来参考,将样条曲线的属性设置为
splines=ortho
,并将节点分组为子图(例如:
subgraph SGn{(这里是Sxx defs)}
),将花费您很长的时间来清理布局。

谢谢您的回答。我把这张杂乱的图表交给了老师,以后再也不用用graphviz了。谢谢你的回答。我在课程中使用了凌乱的图表,之后再也不用使用graphviz了