Graphviz,从左到右的有向图中的节点顺序(马尔可夫链)
Graphviz, order of nodes in left-to-right digraph (Markov chain)
我想使用 graphviz 制作简单马尔可夫链的图形。下面是我使用的代码和我得到的图表。
如何让所有节点按照它们在 .dot
文件中的相同顺序位于水平轴上?显然源文件中节点的顺序并没有解决问题。
(Nice to have) 如何使 2 和 3、3 和 4 以及 4 和 5 之间的边关于节点所在的水平轴对称?您可以看到 p 边是直的,但 q 是弯曲的。我想要它们都弯曲。
digraph {
rankdir=LR;
node [shape = circle];
1
2
3
4
5
6
1 -> 1[label="1"];
2 -> 1[label="q"];
2 -> 3[label="p"];
3 -> 2[label="q"];
3 -> 4[label="p"];
4 -> 3[label="q"];
4 -> 5[label="p"];
5 -> 4[label="q"];
5 -> 6[label="p"];
6 -> 6[label="1"];
}
最重要的一步是确保所有节点都处于同一等级:
digraph
{
rankdir=TB;
node [ shape = circle ];
{ rank = same; 1 2 3 4 5 6 }
2 -> 3[label="p"];
3 -> 4[label="p"];
4 -> 5[label="p"];
5 -> 6[label="p"];
6:ne -> 6:nw[label="1"];
edge[ dir = back ];
1:ne -> 1:nw[label="1"];
1 -> 2[ label="q"];
2 -> 3[label="q"];
3 -> 4[label="q"];
4 -> 5[label="q"];
}
产量
我想使用 graphviz 制作简单马尔可夫链的图形。下面是我使用的代码和我得到的图表。
如何让所有节点按照它们在 .dot
文件中的相同顺序位于水平轴上?显然源文件中节点的顺序并没有解决问题。
(Nice to have) 如何使 2 和 3、3 和 4 以及 4 和 5 之间的边关于节点所在的水平轴对称?您可以看到 p 边是直的,但 q 是弯曲的。我想要它们都弯曲。
digraph {
rankdir=LR;
node [shape = circle];
1
2
3
4
5
6
1 -> 1[label="1"];
2 -> 1[label="q"];
2 -> 3[label="p"];
3 -> 2[label="q"];
3 -> 4[label="p"];
4 -> 3[label="q"];
4 -> 5[label="p"];
5 -> 4[label="q"];
5 -> 6[label="p"];
6 -> 6[label="1"];
}
最重要的一步是确保所有节点都处于同一等级:
digraph
{
rankdir=TB;
node [ shape = circle ];
{ rank = same; 1 2 3 4 5 6 }
2 -> 3[label="p"];
3 -> 4[label="p"];
4 -> 5[label="p"];
5 -> 6[label="p"];
6:ne -> 6:nw[label="1"];
edge[ dir = back ];
1:ne -> 1:nw[label="1"];
1 -> 2[ label="q"];
2 -> 3[label="q"];
3 -> 4[label="q"];
4 -> 5[label="q"];
}
产量