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

Я пытаюсь дать двум узлам внутри двух разных кластеров одинаковый ранг, чтобы точка отображала их на одном уровне. В частности, в этом примере я бы хотел, чтобы узлы a4 и b3 находились на одном уровне. Это код:

digraph G {
    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        a0 -> a1 -> a2 -> a3 -> a4;
        label = "process #1";
    }

    subgraph cluster_1 {
        node [style=filled];
        b0 -> b1 -> b2 -> b3;
        label = "process #2";
        color=blue
    }

    start -> a0;
    start -> b0;
    a1 -> b3;
    b2 -> a3;
    a4 -> end;
    b3 -> end;

//  {rank=same; a4; b3;}

    start [shape=Mdiamond];
    end [shape=Msquare];
}

Я попытался добавить строку {rank=same; a4; b3;}, но это просто испортило кластеры, поскольку удалило узлы a4 и b3 из соответствующих кластеров. Я также пытался добавить невидимые узлы, но они также неправильно модифицируют кластеры. Есть идеи, как это исправить?


person Luca Campanella    schedule 30.04.2019    source источник


Ответы (1)


По сути, вы хотите пропустить уровень в кластере b; вы можете сделать это, только правильно введя невидимый узел. Надеюсь, я правильно понял вашу мысль с помощью этого кода:

digraph G {
    start[ shape=Mdiamond ];
    end[ shape=Msquare ];
    bx[ shape = point, width = 0.01 ];      // invisible node

    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        a0 -> a1 -> a2 -> a3 -> a4;
        label = "process #1";
    }

    subgraph cluster_1 {
        node [style=filled];
        b0 -> b1;
        b1 -> b2;
        b2 -> bx[ dir = none ];          // connecting inv node without arrow
        bx -> b3;                        // continue normally
        label = "process #2";
        color=blue
    }

    start -> a0;
    start -> b0;
    a1 -> b3;
    b2 -> a3;

    a4 -> end;
    b3 -> end;
}

что дает вам

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

person vaettchen    schedule 01.05.2019
comment
Спасибо! Это именно то, что я хотел, даже если это немного громоздко. - person Luca Campanella; 02.05.2019