2012-09-17 17 views
11

Estoy tratando de dibujar un gráfico con la topología de círculo.Graphviz: cómo organizar los nodos con el diseño de circo

Aquí es lo que estoy esperando a ver: una imagen de salida para el gráfico anterior

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

Y aquí es:: enter image description here

Cómo enter image description here

Aquí está mi archivo gv ¿Puedo organizar nodos en graphviz para que se vea como 1?

Respuesta

10

Si el objetivo es tener un gráfico que respete el orden de los nodos, no es tan simple. Puede calculate the position of the nodes with an external script and render it with neato.

O podrías primer esquema los nodos con los bordes que determinan el orden correcto de sólo los nodos:

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 

A continuación, agregue los bordes restantes a tempgraph.gv - simplemente copia -pasar lo siguiente antes del cierre }:

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

y hacerlo con neato y la opción -n:

neato -n tempgraph.gv -Tpng -O 

Es posible que desee ajustar con precisión la posición de las etiquetas:

circo layout

+0

Muchas gracias! Es exactamente lo que he tratado de lograr. – Filipp

+0

Gracias al comando 'circo' era lo que quería, pero solo estaba probando' dot' y 'neato' ¡ahora veo por qué no podía obtener un diseño circular! –

Cuestiones relacionadas