2012-09-17 4 views
11

Sto provando a disegnare un grafico con la topologia della circonferenza.Graphviz: come organizzare i nodi con layout circo

Ecco quello che mi aspetto di vedere: enter image description here

Ecco il mio file GV:

digraph g1 { 
    layout="circo"; 
    node [shape = doublecircle]; N4 N6; 
    node [shape = circle]; 
    N0 -> N1 [ label = "{1,0}"]; 
    N1 -> N2 [ label = "{1,0}"]; 
    N2 -> N3 [ label = "{1,0}"]; 
    N3 -> N4 [ label = "{1,0}"]; 
    N4 -> N5 [ label = "{1,0}"]; 
    N5 -> N6 [ label = "{1,0}"]; 
    N6 -> N0 [ label = "{1,0}"]; 

    N0 -> N4 [ label = "{1,0}"]; 
    N1 -> N5 [ label = "{1,0}"]; 
    N2 -> N6 [ label = "{1,0}"]; 
    N3 -> N0 [ label = "{1,0}"]; 
    N4 -> N1 [ label = "{1,0}"]; 
    N5 -> N2 [ label = "{1,0}"]; 
    N6 -> N3 [ label = "{1,0}"];  
} 

E qui è l'immagine di output per grafico di cui sopra: enter image description here

Come posso organizzare i nodi in graphviz per farlo sembrare 1?

risposta

10

Se l'obiettivo è di avere un grafico che rispetta l'ordine dei nodi, non è così semplice. Potresti calculate the position of the nodes with an external script and render it with neato.

Oppure si potrebbe primo layout i nodi con i bordi che determinano l'ordine corretto solo i nodi:

digraph g1 { 
    node [shape = doublecircle]; N4 N6; 
    node [shape = circle]; 
    edge[label="{1,0}"]; 
    N0 -> N1 -> N2 -> N3 -> N4 -> N5 -> N6 -> N0; 
} 

con:

circo graph.gv > tempgraph.gv 

quindi aggiungere i bordi rimanenti per tempgraph.gv - basta copiare -paste quanto segue prima della chiusura }:

N0 -> N4 [ label = "{1,0}"]; 
N1 -> N5 [ label = "{1,0}"]; 
N2 -> N6 [ label = "{1,0}"]; 
N3 -> N0 [ label = "{1,0}"]; 
N4 -> N1 [ label = "{1,0}"]; 
N5 -> N2 [ label = "{1,0}"]; 
N6 -> N3 [ label = "{1,0}"]; 

E renderlo con neato e l'opzione -n:

neato -n tempgraph.gv -Tpng -O 

Si consiglia di mettere a punto la posizione delle etichette:

circo layout

+0

Grazie mille! È esattamente quello che ho cercato di ottenere. – Filipp

+0

Grazie al comando 'circo' era quello che volevo ma stavo solo provando' punto' e 'neato' ora vedo perché non ho potuto ottenere un layout circolare! –