Подтвердить что ты не робот

Принуждение узлов "главной линии" к прямой линии в Graphviz (или альтернативах)

Я пытаюсь использовать точку Graphviz (но я готов использовать что-то еще), чтобы генерировать график с длинной "главной линией" узлов и множеством небольших ветвей. Я бы хотел, чтобы главная линия была прямая слева направо, с небольшими ветвями над или под ней. Однако Graphviz "балансирует" две ветки, поэтому я заканчиваю кривым графиком.

Чтобы проиллюстрировать здесь, набросок, похожий на то, что я сейчас получаю:

Current Graph

И это то, что я действительно хочу:

Wanted graph

Есть ли способ заставить или побудить Graphviz генерировать граф, как второй? Я могу использовать "dummy" две ветки, чтобы иметь 3-сторонний макет, а затем скрыть/удалить макеты после этого, но если есть лучший вариант, который будет предпочтительнее.

4b9b3361

Ответ 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;
}

Вывод точно такой же, как в моем первом ответе.