2011-07-06 3 views
3

La question essentielle est de savoir comment contrôler le positionnement vertical et horizontal des éléments dans les diagrammes Graphviz. Considérez cet extrait d'un diagramme (créé dans l'éditeur wysiwig).Mise en page dans Graphviz

enter image description here

je tentais de le reproduire dans Graphviz pour savoir si elle convient à mes besoins.

digraph G { 
compound=true; 
node [shape=box]; 
edge [dir=none]; 
    subgraph cluster_tmk_web6 { 
     nginx [label="nginx-frontend TCP 0.0.0.0:80"]; 

     subgraph clusteradminapp { 
      unicorn [label="unicorn_rails TCP 127.0.0.1:8080"]; 
      subgraph clusterROR { 
      label="ROR v.2.1"; 
      brida [label="brida_face_client"]; 
      } 
      label="Admin App"; 
     } 

     memcached [label="memcached"]; 
     sphinx; 
     mongodb; 

     subgraph cluster_errbit { 
      unicorn2; 
      ror3; 
     } 

    label="tmk-web6.service.home"; 
    }  

nginx -> unicorn; 
memcached -> brida [lhead=clusterROR]; 


} 

Et le résultat va comme

enter image description here

J'ignoré certaines des flèches, mais le positionnement est crucial pour moi. Comment puis-je déplacer 'memcached' et 'sphinx' au bas du cluster? Comment déplacer "mongodb" vers la droite? Enfin, le diagramme comprendra de 6 à 10 grappes de cette taille. Comment puis-je contrôler la mise en page, en plaçant certains clusters dans une rangée et d'autres - au-dessus et au-dessous? Je suppose que je devrais utiliser l'attribut "rank" ici, mais je ne sais pas comment. S'il vous plaît, aidez.

Répondre

12

Tout en ajoutant les autres bords (et deux bords invisibles), la sortie graphviz se rapproche de votre résultat souhaité:

digraph G { 
compound=true; 
node [shape=box]; 
edge [dir=none]; 
    subgraph cluster_tmk_web6 { 
     nginx [label="nginx-frontend TCP 0.0.0.0:80"]; 

     subgraph clusteradminapp { 
      unicorn [label="unicorn_rails TCP 127.0.0.1:8080"]; 
      subgraph clusterROR { 
      label="ROR v.2.1"; 
      brida [label="brida_face_client"]; 
      } 
      unicorn -> brida[style=invis]; 
      label="Admin App"; 
     } 

     memcached [label="memcached"]; 
     sphinx; 
     mongodb; 

     subgraph cluster_errbit { 
      unicorn2; 
      ror3; 
      unicorn2 -> ror3[style="invis"]; 
      label="Errbit"; 
     } 

    label="tmk-web6.service.home"; 
    }  

nginx -> unicorn; 
nginx -> unicorn2; 
brida -> memcached [lhead=clusterROR]; 
brida -> sphinx [lhead=clusterROR]; 
ror3 -> mongodb; 
} 

graphviz output

Ajouter quelques couleurs etc., et vous êtes presque Là.

Mais gardez à l'esprit, Graphviz n'est pas un outil wysiwyg - son point fort est le mise en page automatique des nœuds.

+0

D'accord. GraphViz est plus pour générer la mise en page en tant que sortie, moins comme une entrée. – CodeFreezr