Размещение кластеров на один и тот же ранг в Graphviz - PullRequest
30 голосов
/ 26 июля 2011

Я бы хотел, чтобы эти два узла появлялись на одном уровне:

enter image description here

digraph G {
    subgraph cluster1 {
        label="Local Datacenter";
        router1;
        host1;
    }
    subgraph cluster2 {
        label="Remote Datacenter";
        router2;
        host2;
    }
    router1 -> router2;
    router2 -> host2;
    router1 -> host1;
}

Я пытался использовать rank=same и rank=min, но они не дают мне то, что мне нужно.

Интересно, что если я установлю rankdir=LR и закомментирую два ребра маршрутизатор-хост, это даст мне именно тот вид, который я хочу, но я бы хотел оставить ребра нетронутыми.

Ответы [ 2 ]

59 голосов
/ 24 августа 2013

Вы можете использовать атрибут графика newrank (добавлен в GraphViz 2.30), чтобы активировать новый алгоритм ранжирования, который позволяет определять rank=same для узлов, которые принадлежат кластерам.

Добавитьследующая строка вверху:

newrank=true;

Добавьте следующую строку после определения кластера:

{ rank=same; router1; router2; }

Вот результирующий график:

routers with same rank

32 голосов
/ 26 июля 2011

Вы можете просто изменить ребро между маршрутизаторами:

router1 -> router2[constraint=false];

constraint указывает, следует ли использовать ребро в ранжировании узлов.

...