Макет в Графвизе - PullRequest
       13

Макет в Графвизе

3 голосов
/ 06 июля 2011

Основной вопрос заключается в том, как управлять вертикальным и горизонтальным расположением элементов на диаграммах Graphviz.

Рассмотрим этот отрывок диаграммы (созданной в редакторе wysiwig).

enter image description here

Я пытался воспроизвести его в Graphviz, чтобы выяснить, подходит ли он для моих целей.

digraph G {
compound=true;
node [shape=box];
edge [dir=none];
    subgraph cluster_tmk_web6 {
        nginx [label="nginx-frontend TCP 0.0.0.0:80"];

        subgraph clusteradminapp {
            unicorn [label="unicorn_rails TCP 127.0.0.1:8080"];
            subgraph clusterROR {
            label="ROR v.2.1";
            brida [label="brida_face_client"];
            }
            label="Admin App";
        }

        memcached [label="memcached"];
        sphinx;
        mongodb;

        subgraph cluster_errbit {
            unicorn2;
            ror3;
        }

    label="tmk-web6.service.home";
    }       

nginx -> unicorn;
memcached -> brida [lhead=clusterROR];


}

И результат выглядит как

enter image description here

Я опустил некоторые стрелки, но для меня решающее значение имеет расположение.Как мне переместить «memcached» и «sphinx» в конец кластера?Как сдвинуть «mongodb» вправо?И, наконец, диаграмма будет состоять из 6-10 кластеров такого размера.Как мне управлять макетом, размещая одни кластеры в ряд, а другие - сверху и снизу?Я думаю, что я должен использовать атрибут "rank" здесь, но не уверен, как.Пожалуйста, помогите.

1 Ответ

12 голосов
/ 06 июля 2011

Просто добавив оставшиеся ребра (и два невидимых ребра), вывод графика будет ближе к желаемому результату:

digraph G {
compound=true;
node [shape=box];
edge [dir=none];
    subgraph cluster_tmk_web6 {
        nginx [label="nginx-frontend TCP 0.0.0.0:80"];

        subgraph clusteradminapp {
            unicorn [label="unicorn_rails TCP 127.0.0.1:8080"];
            subgraph clusterROR {
            label="ROR v.2.1";
            brida [label="brida_face_client"];
            }
            unicorn -> brida[style=invis];
            label="Admin App";
        }

        memcached [label="memcached"];
        sphinx;
        mongodb;

        subgraph cluster_errbit {
            unicorn2;
            ror3;
            unicorn2 -> ror3[style="invis"];
            label="Errbit";
        }

    label="tmk-web6.service.home";
    }       

nginx -> unicorn;
nginx -> unicorn2;
brida -> memcached [lhead=clusterROR];
brida -> sphinx [lhead=clusterROR];
ror3 -> mongodb;
}

graphviz output

Добавьте несколько цветов и т. Д.,и вы почти у цели.

Но имейте в виду, Graphviz - это не инструмент wysiwyg - его сильной стороной является автоматическая компоновка узлов.

...