Position des Noeuds GraphViz et Rankdir

j'ai beaucoup de chance avec graphviz et j'ai pu faire presque tous les graphique dont j'ai besoin. J'essaie de dupliquer ceci:

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

le plus fidèlement que je peux. La partie du bas de ce graphique va de haut en bas et ça marche. Ce que je n'ai pas pu faire est de placer les 3 premiers enfants juste en dessous "Commandant De L'Intervention". Ils branche de gauche et de droite. De plus, notez comment le les bords sont partagés dans les 8 premiers noeuds. Est-ce possible avec dot? Je peux faire face à tout d'autre mais pas les noeuds. Quelqu'un peut me donner un indice pour résoudre ça?

36
demandé sur simusid 2011-09-10 23:33:30

2 réponses

deux techniques utiles pour reproduire la mise en page des graphiques sont:

  • noeuds invisibles
  • contraintes de rang

voici un essai rapide pour les noeuds 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

112
répondu marapet 2012-12-31 15:20:14

le rendu de Graphviz (point) natif ne supporte pas le style de rendu d'organogramme utilisé dans l'original. Alors qu'il peut générer des bords orthogonaux (comme montré), il n'y a aucun moyen de grouper les bords. La stratification verticale peut être réalisé avec minlen.

la réponse acceptée est en quelque sorte un abus de la notation, mais tout à fait une approche raisonnable.

poor ICS rendering

graph [splines=ortho]; edge [dir = none];

{ rank = same; n2; n3; }
n1 -> { n2; n3; };
n1 -> n4 [minlen = 2];
{ rank = same; n5; n6; n7; n8; };
n1 -> { n5; n6; n7; n8; } [minlen = 3];
-1
répondu Pekka 2018-07-01 10:48:17