Влево->Вправо, Вниз, Вправо->Влево, Вниз, Влево->Вправо макет в Graphviz

У меня есть очень длинная линейная (не много ветвей) блок-схема, которая отображается в графическом представлении как слишком высокая, чтобы поместиться на одной странице, или слишком широкая (если направление было слева направо)

Есть ли простой способ заставить graphviz расположить график таким образом, чтобы он шел слева направо, затем вниз, затем справа налево, а затем вниз? (Надеюсь, это хорошо объясняет).

Желаемый макет

Примерно так (нарисовано в визио)


person 9a3eedi    schedule 11.01.2018    source источник


Ответы (1)


На самом деле довольно легко получить именно то, что вы хотите:

digraph so 
{
    node[ shape = square ];
    { rank = same; 1 2 3 }
    { rank = same; 6 5 4 }
    { rank = same; 7 8 }

    1 -> 2 -> 3;
    3 -> 4;
    6 -> 5 -> 4 [ dir = back ];
    6 -> 7;
    7 -> 8;
}

урожаи

введите здесь описание изображения

rank = same следит за тем, чтобы определенные здесь поля оставались рядом; без этого они были бы выровнены по вертикали.

Поскольку блоки рисуются слева направо в том порядке, в котором они определены, необходимо определить их так, как это сделано выше для 2-й строки.

Это также причина того, что стрелки в среднем ряду указывают назад - на самом деле ребро идет от 6 к 5 и от 5 к 4.

Отсюда вы можете начать тонкую настройку - метки в полях вместо цифр, более длинные края, цвета...

person vaettchen    schedule 11.01.2018
comment
Я надеялся на что-то более простое и менее хакерское, чем это (например, dir=LRDRLD или что-то в этом роде: P, но это работает, я думаю - person 9a3eedi; 14.01.2018