web-dev-qa-db-fra.com

GraphViz Node Placement and Rankdir

J'ai beaucoup de chance avec graphviz et j'ai pu créer presque tous les graphiques dont j'ai besoin. J'essaye de reproduire ceci:

http://en.wikipedia.org/wiki/File:ICS_Structure.PNG

aussi fidèlement que possible. La partie inférieure de ce graphique coule de haut en bas et j'ai bien fonctionné. Ce que je n'ai pas pu faire, c'est placer les 3 premiers enfants juste en dessous de "Incident Commander". Ils se ramifient à gauche et à droite. De plus, notez comment les bords sont partagés dans les 8 premiers nœuds. Est-ce possible avec dot? Je peux gérer tout le reste, mais pas ces nœuds supérieurs. Quelqu'un peut-il me donner un indice pour résoudre ce problème?

42
simusid

Deux techniques utiles pour reproduire la disposition des graphiques sont:

  • Noeuds invisibles
  • Contraintes de classement

Voici un essai rapide pour les nœuds supérieurs:

digraph g{
ranksep=0.2;

node[shape=box3d, width=2.3, height=0.6, fontname="Arial"];
n1[label="Incident Commander"];
n2[label="Public Information\nOfficer"];
n3[label="Liaison Officer"];
n4[label="Safety Officer"];
n5[label="Operations Section"];
n6[label="Planning Section"];
n7[label="Logistics Section"];
n8[label="Finance/Admin. Section"];

node[shape=none, width=0, height=0, label=""];
Edge[dir=none];
n1 -> p1 -> p2 -> p3;
{rank=same; n2 -> p1 -> n3;}
{rank=same; n4 -> p2;}
{rank=same; p4 -> p5 -> p3 -> p6 -> p7;}
p4 -> n5;
p5 -> n6;
p6 -> n7;
p7 -> n8;
}

Et voici le résultat:

dot layout top nodes

123
marapet