2011-04-23 27 views
5

Esto es lo que el gráfico generado se ve actualmente: Y aquí está el código para esto:¿Cómo puedo obtener puntos para dibujar subgrafos uno al lado del otro?

digraph { 
    rankdir=TB; 
    subgraph cluster01 { 
    label="1.fázis" 

    aSTART; 
    node [shape = doublecircle]; a001; 
    node [shape = ellipse]; 

    aSTART -> a0 [ penwidth = 3 label = "0" ]; 
    a0 -> a00 [ penwidth = 3 label = "0" ]; 
    a00 -> a001 [ penwidth = 3 label = "1" ]; 


    a0 -> aSTART [ label = "1" ]; 
    a00 -> a00 [ label = "0" ]; 
    a001 -> a0 [ label = "0"]; 
    a001 -> aSTART [ label = "1"]; 
    aSTART -> aSTART [ label = "1"]; 
    } 
    subgraph cluster02 
    { 
    label="2.fázis" 
    bSTART; b1; b11; 
    node [shape = doublecircle]; b111; 
    node [shape = ellipse]; 

    bSTART -> b1 [ penwidth = 3 label = "1" ]; 
    b1 -> b11 [ penwidth = 3 label = "1" ]; 
    b11 -> b111 [ penwidth = 3 label = "1" ]; 

    b1 -> bSTART [ label = "0" ]; 
    b11 -> bSTART [ label = "0" ]; 
    b111 -> bSTART [ label = "0"]; 
    bSTART -> bSTART [ label = "0"]; 

    b111 -> b111 [label = "1"]; 
    } 

    subgraph cluster03 
    { 
    label="3.fázis"; 

    cSTART; c0; c1; c01; c10; 
    node [shape = doublecircle]; c010; c100; 
    node [shape = ellipse]; 

    cSTART -> c0 [ penwidth = 3 label = "0" ]; 
    c0 -> c01 [ label = "1" ]; 
    c01 -> c010 [ penwidth = 3 label = "0" ]; 

    cSTART -> c1 [ label = "1" ]; 
    c1 -> c10 [ penwidth = 3 label = "0" ];  
    c10 -> c100 [ label = "0" ];  

    c0 -> c1 [ penwidth = 3 label = "1" ]; 
    c01 -> c1 [ label = "1" ]; 
    c1 -> c1 [label = "1"]; 

    c10 -> c01 [ penwidth = 3 label = "1"]; 

    c010 -> c100 [penwidth = 3 label = "0"]; 
    c010 -> c01 [label = "1"]; 

    c100 -> c01 [label = "1"]; 
    c100 -> c0 [label = "0"]; 

    } 

    a001 -> b1 [color = "red" style = "dashed"]; 
    b111 -> c1 [color = "red" style = "dashed"]; 
} 

Si quito las 2 líneas rojas, a continuación, se alinea la forma que yo quiero que:

¿Cómo podría hacer que se alinee así y tener las dos líneas rojas al mismo tiempo?

Respuesta

4

Puede añadir

{ 
    rank=same; 
    aSTART; 
    bSTART 
    cSTART; 
} 

Después de su cluster03 subgrafo. Dot le dió una advertencia, pero dibujar el camino yo quiero:

D:\Code\funfunfun>dot -Tpng -oso1.png -Gcharset=latin1 so1.dot 
Warning: aSTART was already in a rankset, ignored in cluster _anonymous_0 
Warning: bSTART was already in a rankset, ignored in cluster _anonymous_0 
Warning: cSTART was already in a rankset, ignored in cluster _anonymous_0 

gráfico parcheado disponibles here

+0

Impresionante! Pero ¿por qué tenemos que ponerlo al final y no al principio? –

+0

no sé, tuve el mismo problema hace un tiempo y lo resolví de forma experimental, así que no garantizaré el resultado a largo plazo :) – Bruce

2

Se debe utilizar el atributo constraint=false en los dos bordes rojos.

Si es falso, el borde no se utiliza para clasificar los nodos.

+0

Bueno, esto funciona, pero produce líneas de aspecto "no-evitativo" de aspecto extraño: http : //i55.tinypic.com/bg4c9g.png –

Cuestiones relacionadas