2010-01-19 17 views
9

Tengo aquí un gráfico de prueba que me gustaría modificar para que se vea mejor.graphviz: ajustes menores para que el gráfico se vea mejor

alt text

Aquí es el graphviz (punto) fuente, test6.dot:

digraph G { 
    ranksep=0.3; size="6.0,6.0"; 
    node [fontsize=11]; 

    subgraph clusterA { 
     X2 [shape=box]; 

     node [style=filled]; 
     1 -> 2 -> 3 -> X2 -> 5; 
     6; 
     7; 
     label = "A"; 
     color=blue 
    } 
    X1 [shape=box]; 
    subgraph clusterB { 
     node [style=filled]; 
     8; 
     9; 
     10 -> 11 -> 12; 
     12 -> 9; 
     12 -> 8 -> 13; 
     13 -> 14; 
     label = "B"; 
     color=blue 
    } 
    subgraph clusterC { 
     label = "C"; 
     { 
     node [style="invis"]; 
     gap; 
     } 
     node [shape=box]; 

     edge [style="invis"]; 
     X3 -> gap -> X4;   
    } 

    14 -> X4 -> 3; 
    6 -> X1 -> 10; 
    { edge [dir="both"]; 
     8 -> X3 -> 7; 
    } 

    9 -> X3 
    } 

Preguntas/cambios que me gustaría hacer:

  • Quiero que el flujo de nodos 10 -> 11 -> 12 -> 8 -> 13 -> 14 a estar en una línea vertical (intercambiar 8 y 9 horizontalmente). ¿Cómo puedo hacer esto? (lo mismo con 1 -> 2 -> 3 -> X2 -> 5; swap 6 y 1)
  • Quiero que X1 esté en la misma posición vertical que 10, y en la misma posición horizontal que en 6. ¿Cómo puedo hacer esto?
  • Quiero que 8, X3 y 7 estén en la misma posición vertical, también con 14, X4 y 3. ¿Cómo puedo hacer esto?
  • La declaración ranksep=0.3; funciona de maravilla excepto que 8 -> 13 -> 14 tiene una brecha más grande, al igual que X3 -> gap -> X4. ¿Por qué no obedece a la regla de ranksep = 0.3 y cómo soluciono esto?

Respuesta

17

A continuación se muestra lo mejor que puedo hacer: los nodos fantasmas y los bordes ayudan. Pero no puedo alentar un orden particular en la dirección transversal (la otra dirección de RankDir).

alt text

digraph G { 
    ranksep=0.3; size="6.0,6.0"; 
    rankdir=TB; 

    node [fontsize=11]; 

    subgraph clusterA { 
     X2 [shape=box]; 
     label = "A"; 
     color=blue; 

     node [style=filled]; 
     /* force 1, 6, and 7 to be at the top together, 
      add enough phantoms to keep things in nice columns */ 
     { 
      node [style="invis", label=""]; 
      phantom3; 
      phantom4; 
      phantom5; 
      phantom6; 
     } 


      rank = same; 
      1 -> 2 -> 3 -> X2 -> 5;   

      edge [style="invis"]; 
      6 -> phantom3 -> phantom5; 
      7 -> phantom4 -> phantom6; 

    } 
    subgraph clusterB { 
     node [style=filled]; 
     label = "B"; 
     color=blue; 
     /* create an invisible phantom node 
      to take up space */ 
     { 
     node [style="invis",label=""]; 
     phantom1; 
     phantom1b; 
     } 

     { rank=same; 11; 
     phantom1; 
     } 

     10 -> 11 -> 12 -> 8 -> 13 -> 14; 
     12 -> 9; 
     phantom1 -> 9 -> phantom1b [style="invis"]; 

    } 


    /* force X1 to be at the same vertical pos as 10 
     (this yields a warning though) */ 
    { rank = same; 
     X1 [shape=box]; 
     10; 
    } 

    6 -> X1; 
    X1 -> 10 [weight=0.5]; 

    subgraph clusterC { 
     label = "C"; 

     phantom2 [style="invis", label=""]; 

     node [shape=box]; 

     edge [style="invis"]; 
     X3 -> phantom2 -> X4;   
    } 

    9 -> X3 [weight=0.5]; 

    { 
     edge [weight=20]; 
     14 -> X4 -> 3; 
     3 -> X4 -> 14 [style="invis"]; 
     /* add a reverse path so graphviz doesn't force 14 above X4 above 3 */ 
    } 
    { 
     edge [dir="both", weight=20]; 
     8 -> X3 -> 7; 
     7 -> X3 -> 8 [style="invis"]; 
     edge [style="invis"]; 
     X4 -> phantom6; 
     1 -> phantom2; 
     8 -> phantom2; 
    } 

    } 
Cuestiones relacionadas