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

Размещение кластеров в одном ранге в Graphviz

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

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 и закомментировал два края маршрутизатора-хозяина, он дает мне именно тот вид, который я хочу, но я хотел бы оставить его неповрежденными.

4b9b3361

Ответ 1

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

router1 -> router2[constraint=false];

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

Ответ 2

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

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

newrank=true;

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

{ rank=same; router1; router2; }

Здесь результирующий граф:

routers with same rank