Заставить GraphViz выравнивать подграфы один под другим

У меня есть граф с 3 подграфами, которые расположены один вдоль другого, я хочу, чтобы они располагались один над другим (я не хочу, чтобы направление содержимого подграфа менялось).

Простой пример:

digraph G {
rankdir=TB;
    subgraph cluster_lkg{
        subgraph cluster_sentence_1{
            "A1","A2","A3"
            "A1" -> "A2"
            "A1" -> "A3"
        }
        subgraph cluster_concepts_1{
            "B1","B2","B3"
            "B1" -> "B2"
            "B1" -> "B3"
        }
    }
    subgraph cluster_fkgs{
            "C1","C2","C3"
            "C1" -> "C2"
            "C1" -> "C3"
    }

}


person danielvast    schedule 04.03.2017    source источник


Ответы (1)


Вам нужно соединить кластеры (или, точнее, узлы внутри кластеров), чтобы сделать ваш rankdir = TB эффективным. Вы можете сделать это, используя невидимые края:

digraph G 
{
    rankdir=TB;    
    subgraph cluster_lkg
    {
        subgraph cluster_sentence_1
        {
            "A1","A2","A3"
            "A1" -> "A2"
            "A1" -> "A3"
        }
        subgraph cluster_concepts_1{
            "B1","B2","B3"
            "B1" -> "B2"
            "B1" -> "B3"
        }
        //A1 -> B1;
    }
    subgraph cluster_fkgs
    {
            "C1","C2","C3"
            "C1" -> "C2"
            "C1" -> "C3"
    }
    edge[ style = invis ];
    { A2 A3 } -> B1;
    { B2 B3 } -> C1;
}

что дает

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

Узел C1 смещен - я думаю, это происходит из-за вложенности кластеров, но у меня нет рецепта против этого. Надеюсь, это поможет в любом случае.

person vaettchen    schedule 21.10.2017