Graphviz: как организовать узлы с круговой компоновкой

Я пытаюсь нарисовать график с круговой топологией.

Вот что я ожидаю увидеть: enter image description here

Вот мой файл gv:

digraph g1 {
    layout="circo";
    node [shape = doublecircle]; N4 N6;
    node [shape = circle];
    N0 -> N1 [ label = "{1,0}"];
    N1 -> N2 [ label = "{1,0}"];
    N2 -> N3 [ label = "{1,0}"];
    N3 -> N4 [ label = "{1,0}"];
    N4 -> N5 [ label = "{1,0}"];
    N5 -> N6 [ label = "{1,0}"];
    N6 -> N0 [ label = "{1,0}"];

    N0 -> N4 [ label = "{1,0}"];
    N1 -> N5 [ label = "{1,0}"];
    N2 -> N6 [ label = "{1,0}"];
    N3 -> N0 [ label = "{1,0}"];
    N4 -> N1 [ label = "{1,0}"];
    N5 -> N2 [ label = "{1,0}"];
    N6 -> N3 [ label = "{1,0}"];    
}

И вот выходное изображение для графика выше: enter image description here

Как я могу упорядочить узлы в graphviz, чтобы он выглядел как 1?

Ответ 1

Если цель состоит в том, чтобы иметь график, который учитывает порядок узлов, это не так просто. Вы можете рассчитать положение узлов с внешним скриптом и визуализировать его с помощью neato.

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

digraph g1 {
    node [shape = doublecircle]; N4 N6;
    node [shape = circle];
    edge[label="{1,0}"];
    N0 -> N1 -> N2 -> N3 -> N4 -> N5 -> N6 -> N0;
}

с:

circo graph.gv > tempgraph.gv

Затем добавьте оставшиеся ребра в tempgraph.gv - просто скопируйте-вставьте следующее до закрытия }:

N0 -> N4 [ label = "{1,0}"];
N1 -> N5 [ label = "{1,0}"];
N2 -> N6 [ label = "{1,0}"];
N3 -> N0 [ label = "{1,0}"];
N4 -> N1 [ label = "{1,0}"];
N5 -> N2 [ label = "{1,0}"];
N6 -> N3 [ label = "{1,0}"];

И визуализируйте его с помощью neato и -n:

neato -n tempgraph.gv -Tpng -O

Возможно, вы захотите точно настроить положение меток:

circo layout