Graphviz节点排序技巧

使用子图和rankdir , rank指令可以指定部分节点排序。
下图是没有使用这些指令的代码:

digraph finite_state_machine {
    size="18,10"
    node [shape = doublecircle]; 8;
	node [shape = circle];0;
    node [shape = plaintext];
	"" ->0 [label ="start"];
	node [shape = circle];
	0->1 [label = "a"];
	2->3 [label = "a"];
	4->5 [label = "b"];
	3->6 [label = "ε"];
	5->6 [label = "ε"];
	1->2 [label = "ε"];
	1->4 [label = "ε"];
	6->0 [label = "ε"];
	6->7 [label = "ε"];
	7->8 [label = "a"];
}

显示效果:


使用子图和rankdir ,rank代码:

digraph finite_state_machine {
	rank = name;0;1;
	rankdir = LR;
    size="18,10"
    node [shape = doublecircle]; 8;
	node [shape = circle];0;
    node [shape = plaintext];
	"" ->0 [label ="start"];
	node [shape = circle];
	0->1 [label = "a"];
	subgraph a{
		2->3 [label = "a"];
		4->5 [label = "b"];
		3->6 [label = "ε"];
		5->6 [label = "ε"];
	}
	1->2 [label = "ε"];
	1->4 [label = "ε"];
	6->0 [label = "ε"];
	6->7 [label = "ε"];
	7->8 [label = "a"];
}

期中rankdir=LR;表示从左至右,rank排序,效果:


在dokuwikiwiki上使用plot插件需要注意: