GraphViz - Как сделать, чтобы подграф был слева направо, когда основной граф сверху вниз? - PullRequest
23 голосов
/ 12 октября 2009

У меня есть такой файл графика:

digraph {
    "Step1" -> "Step2" -> "Step3";

    subgraph step2detail {
        "Step2" -> "note1";
        "Step2" -> "note2";
        "Step2" -> "note3";
        "Step2" -> "note4";
        rankdir=TB
   }
}

Я хочу, чтобы подграф step2detail висел справа от Step2.

Прямо сейчас это выглядит так:

enter image description here

Я хочу, чтобы все Step1, Step2 и Step3 располагались вертикально друг над другом и в 1 столбце.

Ответы [ 5 ]

9 голосов
/ 31 августа 2010

Хитрость для получения графика, который вы описали, заключается в использовании двух подграфов и связи между ними. Невидимые края в «деталях» - это то, что держит ноты выровненными.

digraph {
    rankdir="LR";

    subgraph steps {
        rank="same";
        "Step1" -> "Step2" -> "Step3";
    }

    subgraph details {
        rank="same";
        edge[style="invisible",dir="none"];
        "note1" -> "note2" -> "note3" -> "note4";
    }

    "Step2" -> "note1";
    "Step2" -> "note2";
    "Step2" -> "note3";
    "Step2" -> "note4";
}

Результат:

enter image description here

7 голосов
/ 16 ноября 2011

Здесь все просто - используйте атрибут group, чтобы Graphviz предпочитал прямой края:

digraph {
    node[group=a, fontname="Arial", fontsize=14];
    "Step1" -> "Step2" -> "Step3";

    node[group=""];
    "Step2" -> "note1";
    "Step2" -> "note2";
    "Step2" -> "note3";
    "Step2" -> "note4";
}

graphviz output

7 голосов
/ 10 декабря 2009

Сгруппировав узлы шага в кластеризованный подграф, вы получите следующий вывод:

digraph {
    subgraph cluster_0 {
        color=invis;
        "Step1" -> "Step2" -> "Step3";
    }

    subgraph cluster_1 {
        color=invis;
        "Step2" -> "note4";
        "Step2" -> "note3";
        "Step2" -> "note2";
        "Step2" -> "note1";
   }
}

image

color=invis удаляет границу, которая в противном случае была бы нарисована вокруг кластера

0 голосов
/ 26 апреля 2019

rankdir не работает непосредственно в подграфе, но если вы добавите еще один набор фигурных скобок - как бы это ни называлось - rankdir сработает:

digraph {
    "Step1" -> "Step2" -> "Step3";

    subgraph step2detail {
        {
            "Step2" -> "note1";
            "Step2" -> "note2";
            "Step2" -> "note3";
            "Step2" -> "note4";
            rankdir=TB
            rank=same
        }
   }
}

enter image description here

0 голосов
/ 16 января 2010

Используйте команду: rankdir = LR;

digraph {
rankdir=LR;

    "Step1" -> "Step2" -> "Step3";

    subgraph step2detail {
        "Step2" -> "note1";
        "Step2" -> "note2";
        "Step2" -> "note3";
        "Step2" -> "note4";
        rankdir=TB
   }

}
...