2012-02-06 12 views
13

Próbuję wizualizować strukturę drzewa za pomocą graphviz, problem jest jak wykres staje się większy graphviz zaczyna się przestawiać kolejność węzłów. Że mam następujące,Zapobieganie grafviz przestawiania węzłów

A 
/| \ 
B C D 

staje,

A 
/| \ 
B D C 

prawdopodobnie ma to, aby zaoszczędzić miejsce, ale moim celem kontekście węzłów znaczenia próbowałem dodając

graph [ordering="out"]; 

, ale nie zmieniło to wyniku.

EDIT:

digraph bt { 
graph [ordering="out"]; 
node [style="rounded", shape=box] 
N_2386 -> N_2387 
N_2387 -> N_2388 
N_2388 -> N_2389 
N_2388 -> N_2390 
N_2387 -> N_2391 
N_2386 -> N_2392 
subgraph cluster_2393 { 
labeljust = "l"; 
style=dashed;color="#B0B0B0" 
N_2392 -> N_2394 
N_2394 -> N_2395 
N_2395 -> N_2396 
N_2396 -> N_2397 
N_2397 -> N_2398 
N_2397 -> N_2399 
N_2396 -> N_2400 
N_2400 -> N_2401 
N_2400 -> N_2402 
N_2395 -> N_2403 
N_2403 -> N_2404 
N_2404 -> N_2405 
N_2405 -> N_2406 
N_2403 -> N_2407 
N_2407 -> N_2408 
N_2408 -> N_2409 
N_2409 -> N_2410 
N_2410 -> N_2411 
N_2411 -> N_2412 
N_2412 -> N_2413 
N_2412 -> N_2414 
N_2412 -> N_2415 
N_2411 -> N_2416 
N_2416 -> N_2417 
N_2416 -> N_2418 
N_2416 -> N_2419 
N_2408 -> N_2420 
N_2408 -> N_2421 
N_2403 -> N_2422 
N_2395 -> N_2423 
N_2392 -> N_2424 
} 
} 

Wykres na pytanie, co jest mi potrzebne, N_2387 powinno być po prawej N_2392 powinien być po lewej stronie. Jaka jest kolejność ich wstawiania.

+1

Czy przypadkiem rozwiązałeś ten problem? Mam niestety ten sam problem. – tantrev

Odpowiedz

5

Próbowałem następujących

digraph g { 
    ordering=out ; 
    node [shape=box] ; 

    a -> b ; a -> c ; a -> d ; a -> e ; a -> f ; 
    a -> g ; a -> h ; a -> i ; a -> j ; a -> k ; 
    a -> l ; a -> m ; a -> n ; a -> o ; a -> p ; 
    a -> q ; a -> r ; a -> s ; a -> t ; a -> u ; 
    a -> v ; a -> w ; a -> x ; a -> y ; a -> z ; 
} 

i wszystkie węzły b - z są na tym samym poziomie w prawidłowej kolejności. Jakiej wersji używasz?

+0

Uaktualniłem do tego samego co się stało Dodałem wykres do pytania. –

1

Jeśli zmienisz pierwszą gałąź na podgraph, dwie podgramy zostaną uporządkowane tak, jak zapisano w pliku.

Wydaje się, że subgraph jako wyższy priorytet jako normalny węzeł, a tym samym ordering=out, wydaje się nie być honorowany.

to działa:

digraph bt { 
    graph [ordering="out"]; 
    node [style="rounded", shape=box] 
    N_2386 -> N_2387 
    subgraph cluster_first { 
    N_2387 -> N_2388 
    N_2388 -> N_2389 
    N_2388 -> N_2390 
    N_2387 -> N_2391 
    } 
    N_2386 -> N_2392 
    subgraph cluster_2393 { 
    labeljust = "l"; 
    style=dashed;color="#B0B0B0" 
    N_2392 -> N_2394 
    N_2394 -> N_2395 
    N_2395 -> N_2396 
    N_2396 -> N_2397 
    N_2397 -> N_2398 
    N_2397 -> N_2399 
    N_2396 -> N_2400 
    N_2400 -> N_2401 
    N_2400 -> N_2402 
    N_2395 -> N_2403 
    N_2403 -> N_2404 
    N_2404 -> N_2405 
    N_2405 -> N_2406 
    N_2403 -> N_2407 
    N_2407 -> N_2408 
    N_2408 -> N_2409 
    N_2409 -> N_2410 
    N_2410 -> N_2411 
    N_2411 -> N_2412 
    N_2412 -> N_2413 
    N_2412 -> N_2414 
    N_2412 -> N_2415 
    N_2411 -> N_2416 
    N_2416 -> N_2417 
    N_2416 -> N_2418 
    N_2416 -> N_2419 
    N_2408 -> N_2420 
    N_2408 -> N_2421 
    N_2403 -> N_2422 
    N_2395 -> N_2423 
    N_2392 -> N_2424 
    } 
} 
+0

Problem polega na tym, że programowo generuję te wykresy, z których nie wiem wcześniej, jak będą wyglądały. –

2

Jeśli chcesz kontrolować kolejności pewnych pozycji wykorzystać niewidoczną krawędź między nimi. Połączenie tego z dyrektywą rank daje dużą kontrolę.

np: oto próbka tagcloud układ z Graphviz:

/* 
Using a graph and relationships just to push things onto different lines. 
Two layout rules: 
1) all items on a given line go into a "rank=same" phrase 
2) a relationship is needed between the first word on each line and the next line down to 
    force the vertical alignment. 
*/ 
digraph { 
    edge[style=invisible] 
    node[shape=none] 

    fred [fontsize=18] 
    harry [fontsize=8] 
    jack [fontsize=12] 
    sally [fontsize=12] 
    mika 
    amy 
    jan 
    jack -> fred 
    fred -> mika 
    {rank=same;fred;harry} 
    {rank=same;mika amy; jan} 
} 
0

Graphviz jest przeznaczony do generowania wykresów z przyjemnym wyglądzie. Próba wymuszania układu powoduje porażkę w dużej mierze z wartości narzędzia.

Jak już wspomniano, niewidoczne krawędzie mogą być wykorzystane do wymuszenia jakiś układ, a leksykograficzny zamawiania (wcześniejsze węzły wydają się być umieszczony bardziej z lewej) może również wskazywać na preferencje.

Generalnie dodanie większej liczby ograniczeń do układu powoduje, że układy perwersyjne są niezwykle trudne do rozwiązania.

Niektóre odchylenia od oczekiwanego układu nie powinny automatycznie powodować próby wymuszenia wyniku. Mniejsza liczba wiązań sprawia, że ​​generowane wykresy wyglądają dobrze, gdy zmieniają się w czasie, nawet jeśli mogą radykalnie zmienić wygląd.