2012-02-06 17 views
13

Sto provando a visualizzare una struttura ad albero usando graphviz, il problema è quando il grafico diventa più grande graphviz inizia a riorganizzare l'ordine dei nodi. Dire che ho seguito,Prevenire graphviz dalla riorganizzazione dei nodi

A 
/| \ 
B C D 

diventa,

A 
/| \ 
B D C 

probabilmente significa questo per risparmiare spazio, ma nel mio contesto ordine dei nodi importa Ho provato ad aggiungere,

graph [ordering="out"]; 

ma non ha modificato l'output.

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 
} 
} 

grafico in questione cosa ho bisogno è, N_2387 dovrebbe essere a destra N_2392 dovrebbe essere a sinistra. Qual è l'ordine in cui li inserisco.

+1

Hai mai per caso risolto questo problema? Sto avendo lo stesso problema, purtroppo. – tantrev

risposta

5

ho provato la seguente

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 ; 
} 

e tutti i nodi b - z sono allo stesso livello nell'ordine corretto. Quale versione stai usando?

+0

Ho aggiornato l'ultima cosa che succede ho aggiunto il grafico in questione alla domanda. –

1

Se si modifica il primo ramo in un sottografo, i due sottografi verranno ordinati come scritti nel file.

Sembra che il sottografo sia una precedenza più alta di un nodo normale e quindi il ordering=out sembra non essere onorato.

Questo funziona:

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

Il problema è che sto generando questi grafici a livello di codice. Non so in anticipo quale sarà il suo aspetto. –

2

Se si desidera controllare ordine delle specifiche voci utilizzano un bordo invisibile tra di loro. Combinando questo con la direttiva di rango si ha un controllo notevole.

es: ecco un campione tagcloud layout dal 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 è progettato per generare grafici con aspetto gradevole. Cercando di forzare il layout, si sconfigge gran parte del valore dello strumento.

Come notato, i bordi invisibili possono essere utilizzati per imporre un layout e l'ordinamento lessicografico (i nodi precedenti tendono ad essere posizionati più a sinistra) può anche indicare una preferenza.

In generale, l'aggiunta di ulteriori vincoli a un layout produce layout perversi che sono incredibilmente difficili da risolvere.

Alcune deviazioni da un layout previsto non dovrebbero essere automaticamente causa di provare a forzare il risultato. Meno vincoli rendono i grafici generati belli come cambiano nel tempo, anche se possono cambiare radicalmente nell'aspetto.

Problemi correlati