Graph 状态机中自反边的绘制
我必须画一个小的有限状态机,它有一些自反转换(意味着转换的开始状态和结束状态是相等的) 问题在于,在Graphviz中渲染会产生糟糕的结果Graph 状态机中自反边的绘制,graph,graphviz,state-machine,rendering-engine,Graph,Graphviz,State Machine,Rendering Engine,我必须画一个小的有限状态机,它有一些自反转换(意味着转换的开始状态和结束状态是相等的) 问题在于,在Graphviz中渲染会产生糟糕的结果 digraph finite_state_machine { edge [fontsize=11]; S0 -> S0 [label = "td=1\n-/e2"]; S0 -> S1 [label = "td=3 \n-/e3" ]; S1 ->
digraph finite_state_machine {
edge [fontsize=11];
S0 -> S0 [label = "td=1\n-/e2"];
S0 -> S1 [label = "td=3 \n-/e3" ];
S1 -> S0 [label = "td=3\n-/-\nt=0"];
S0 -> S2 [label = "P:i1/e4"];
S2 -> S0 [label = "td=0\n-/-" ];
S0 -> S0 [label = "i1/e1\ntd+=1"];
}
有没有办法让这个看起来更好一点
顺便说一句:我尝试了头部/尾部端口,但它们在我的Graphviz版本(MacOSX上的1.13)上不起作用
我不局限于点引擎,我只想要一个好看的图形,而不关心渲染器/语言
非常感谢因此,如果找到了解决方法,但不是我问题的真正答案。
诀窍是有一个连接到起始状态的不可见节点。起始状态然后不是层次结构的顶部,并且在放置节点时有一点更大的自由度。此外,头部/尾部端口属性也可以正常工作。 结果是——如果不是像我希望的那样漂亮的话——看起来还可以
digraph finite_state_machine {
edge [fontsize=7];
fontsize = 11;
rankdir=LR;
{rank = same;null}
{rank = same; S0}
{rank = same; S1 S2}
nodesep = 1;
ranksep = 1;
null [shape = plaintext label=""];
null -> S0;
S0 -> S0 [label = "td=1\n-/e2", tailport = n, headport = n];
S0 -> S1 [label = "td=3 \n-/e3" ];
S1 -> S0 [label = "td=3\n-/-\nt=0"];
S0 -> S2 [label = "P:i1/e4"];
S2 -> S0 [label = "td=0\n-/-" ];
S0 -> S0 [label = "i1/e1\ntd+=1" headport = s tailport = s];
}
虽然这是可行的(对于这个特定的例子),但我仍然非常希望得到一些关于dot/Graphviz的建议,或者是一种以令人愉快的方式呈现有限状态机的替代方法