我是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边缘的曲线。
非常感谢任何输入。
答案 0 :(得分:0)
您在16个月前问了这个问题,所以我希望您仍然选择同一门大学课程。无论如何,将样条线的属性设置为splines=ortho
并将节点[S1:S8]
分组为一个子图(例如:subgraph SGn { (Sxx defs in here) }
),将为您清理布局提供很长的路要走。