【问题标题】:Improving layout of state machine in graphviz改进graphviz中状态机的布局
【发布时间】:2017-03-23 16:08:25
【问题描述】:

我是 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"];
}

输出是这样的:

所以是的,它有效。但是很丑。

关于如何改进布局的任何建议?

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

非常感谢任何意见。

【问题讨论】:

    标签: graph graphviz dot


    【解决方案1】:

    你在 16 个月前问过这个问题,所以我希望你不会还在上同样的单门课程。无论如何,为了将来参考,将样条线的属性设置为 splines=ortho 并将节点 [S1:S8] 分组到一个子图中(例如:subgraph SGn { (Sxx defs in here) })将使您在清理布局方面有很长的路要走。

    【讨论】:

    • 感谢您的回答。我把杂乱的图表变成了课程,之后再也不用使用graphviz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2020-07-04
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多