2014-01-26 1 views
4

Pre-Scriptgraphviz - Как организовать узлы в цикле в прямоугольной компоновке?

... И только когда я закончил производство этих примеров, я увидел 'roundtrip' flow topic, который выглядит красиво. Поскольку я уже сказал это здесь, мог бы также спросить: есть ли другие альтернативы?

Оригинал Сообщение

Есть ли способ, чтобы автоматически создать узлы в прямоугольной компоновке, когда в подграфе?

В качестве примера, скажем, у меня данная структура:

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    a -> b -> c -> d -> e -> f -> g -> h -> b; 
} 

Это дает диаграмму test_1

Моей цели, чтобы они выстраиваются в прямоугольнике с рядами трех узлов, образуя

Если я пытаюсь ограничить ранг и изменить rankdir, не как ожидалось (я предполагаю, что вы не можете изменить rankdir подобное):

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    a -> b -> c -> d -> e -> f -> g -> h -> b; 

    subgraph 
    { 
     rankdir="TB"; 
     rank="same"; 
     c; d; e; 
    } 

    subgraph 
    { 
     rankdir="TB"; 
     rank="same"; 
     f; g; h; 
    } 
} 

test_2

Если я пройти и вручную и присвоить звание выстроиться, как я желал, это работает:

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    a -> b -> c -> d -> e -> f -> g -> h -> b; 

    { rank="same"; c; h; } 
    { rank="same"; d; g; } 
    { rank="same"; e; f; } 
} 

test_3

Редактировать

Просто попробовал метод, работал Что ж. Мне нужно было открепить край самого крайнего края, чтобы он не мог сделать асимметричную форму, но в целом работал как шарм (и гораздо более интуитивно понятный)!

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    a -> b -> c -> d -> e; 
    e -> f [ constraint="false" ]; 
    b -> h -> g -> f [ dir="back" ]; 
} 

enter image description here

ответ

2

Не знаете, где поместить это, но я буду идти вперед и разместить его здесь в качестве побочного ответа.

Я попробовал больший цикл:

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    x -> y; 
    y -> aa [ constraint="false" ]; 
    aa -> ab -> ac -> ba; 

    { rank="same"; ba -> bb -> bc -> ca; } 

    da -> cc -> cb -> ca [ dir="back" ]; 

    { rank="same"; aa -> dc -> db -> da [ dir="back" ]; }; 

} 

enter image description here

пытался Также из рисунка змеиный:

digraph 
{ 
    rankdir="LR"; 

    node [ shape="circle", style="bold, filled", fillcolor="#dddddd" ]; 

    x -> y; 
    y -> aa [ constraint="false" ]; 
    aa -> ab -> ac; 
    ac -> ba [ constraint="false" ]; 
    bc -> bb -> ba [ dir="back" ]; 

    bc -> ca [ constraint="false" ]; 
    ca -> cb -> cc; 

    cc -> da [ constraint="false" ]; 
    dc -> db -> da [ dir="back" ]; 

    y -> dc [ dir="back", constraint="false" ]; 

    // { rank="same"; aa; bc; ca; dc; }; 
} 

Это одно по-прежнему немного грязный.

enter image description here

Смежные вопросы