Графвиз, порядок узлов в орграке слева направо (цепь Маркова)
Я хотел бы использовать graphviz для построения графа простой цепи Маркова. Ниже приведен код, который я использовал, и график, который я получил.
Как сделать так, чтобы все узлы располагались на горизонтальной оси в том же порядке, что и в .dot
файл? Видимо, порядок узлов в исходном файле не решает проблему.
(Приятно иметь) Как я могу сделать ребра между 2 и 3, 3 и 4 и 4 и 5 симметричными относительно горизонтальной оси, на которой сидят узлы? Вы можете видеть, что р ребра прямые, но д изогнуты. Я бы хотел, чтобы они оба изогнулись.
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"];
}
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"];
}
доходность