改进graphviz中状态机的布局

时间:2017-03-23 16:08:25

标签: 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[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"];
}

输出是这样的: Graph

是的,它有效。但它非常难看。

有关如何改善布局的任何建议?

最让我困扰的是边缘和文字之间的距离很小,边缘重叠以及S4-S7到S9边缘的曲线。

非常感谢任何输入。

1 个答案:

答案 0 :(得分:0)

您在16个月前问了这个问题,所以我希望您仍然选择同一门大学课程。无论如何,将样条线的属性设置为splines=ortho并将节点[S1:S8]分组为一个子图(例如:subgraph SGn { (Sxx defs in here) }),将为您清理布局提供很长的路要走。