Graphviz - проблема позиционирования ящика - PullRequest
3 голосов
/ 24 июня 2011

Моя структура имеет две основные цепочки с боковыми узлами в подграфах. Все выглядит хорошо, но когда я закрываю две цепочки, все поля в подграфах переходят на правую сторону. В конце моего кода вы можете удалить «Я» -> «J», тогда вы сможете лучше понять, что я имею в виду. Я не являюсь носителем английского языка, извините за мой английский, и я новичок Graphviz.

digraph G {
    size ="6,6";
    node [color=black fontsize=12, shape=box, fontname=Helvetica];

subgraph {
    rank = same;
    "b"->"B"[arrowhead=none];
    }

subgraph {
    rank=same;
    "c"->"C"[arrowhead=none];
    }

subgraph {
        rank=same;
        "e"->"E" [arrowhead=none];
    }

subgraph {
    rank = same;
    "f"->"F"[arrowhead=none];
}

subgraph {
    rank = same;
    "g"->"G"[arrowhead=none];
}

"0" -> "A" -> "B" -> "C"->"D" -> "E" -> "F" -> "G" -> "H"->"I";
"0" -> "K"->"L"->"M"->"N"->"O" ->"P"->"1";

subgraph {
    rank = same;
    "L"->"l"[arrowhead=none];
}

subgraph {
    rank=same;
    "M"->"m"[arrowhead=none];
}

subgraph {
    rank=same;
    "N"->"n" [arrowhead=none];
}

subgraph {
    rank = same;
    "O"->"o"[arrowhead=none];
}

subgraph {
    rank = same;
    "P"->"p"[arrowhead=none];
}

"1"->"J";
"I"->"J";
}

enter image description here


и с "I"->"J"; удалено:

enter image description here

1 Ответ

5 голосов
/ 24 июня 2011

Вот как я бы поступил: создайте кластер для каждой главной цепочки с ее боковыми узлами:

digraph G {
    size ="6,6";
    node [color=black fontsize=12, shape=box, fontname=Helvetica];

    subgraph[style=invis];

    subgraph cluster0 {
        A -> B -> C -> D -> E -> F -> G -> H -> I;
        edge[arrowhead=none];
        {rank = same; b->B;}
        {rank = same; c->C;}
        {rank = same; e->E;}
        {rank = same; f->F;}
        {rank = same; g->G;}
    }

    subgraph cluster1 {
        K -> L -> M -> N -> O -> P -> 1 -> J;
        edge[arrowhead=none];
        {rank = same; L->l;}
        {rank = same; M->m;}
        {rank = same; N->n;}
        {rank = same; O->o;}
        {rank = same; P->p;}
    }
    0 -> A;
    0 -> K;
    I -> J;
}

В результате:

graphviz output

...