Принуждение узлов "главной линии" к прямой линии в Graphviz (или альтернативах)
Я пытаюсь использовать точку Graphviz (но я готов использовать что-то еще), чтобы генерировать график с длинной "главной линией" узлов и множеством небольших ветвей. Я бы хотел, чтобы главная линия была прямая слева направо, с небольшими ветвями над или под ней. Однако Graphviz "балансирует" две ветки, поэтому я заканчиваю кривым графиком.
Чтобы проиллюстрировать здесь, набросок, похожий на то, что я сейчас получаю:
![Current Graph]()
И это то, что я действительно хочу:
![Wanted graph]()
Есть ли способ заставить или побудить Graphviz генерировать граф, как второй? Я могу использовать "dummy" две ветки, чтобы иметь 3-сторонний макет, а затем скрыть/удалить макеты после этого, но если есть лучший вариант, который будет предпочтительнее.
Ответы
Ответ 1
Вот решение, использующее атрибут вес:
digraph G {
rankdir="LR";
node[width=0.15, height=0.15, shape=point];
edge[weight=2, arrowhead=none];
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
edge[weight=1];
2 -> 9 -> 10 ;
5-> 11 -> 12;
}
Результат:
![graphivz]()
Ответ 2
Второе решение, использующее атрибут group узлов - снова направленный граф:
С помощью ссылки graphviz dot:
Если конечные точки ребра принадлежат одна и та же группа, т.е. групповой атрибут, параметры установлены на избегать переходов и держать края прямой.
Итак, идем:
digraph g{
rankdir="LR";
node[width=0.15, height=0.15, shape=point, group=main];
edge[arrowhead=none];
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
node[group=branches];
2 -> 9 -> 10;
5 -> 11 -> 12;
}
Вывод точно такой же, как в моем первом ответе.