rankdir open nodesep fdp example color graphviz dot

nodesep - open graphviz file



UbicaciĆ³n del nodo GraphViz y Rankdir (2)

Estoy teniendo mucha suerte con graphviz y he podido hacer casi todos los gráficos que necesito. Estoy tratando de duplicar esto:

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

tan fielmente como puedo. La parte inferior de ese gráfico fluye de arriba hacia abajo y tengo que funcionar bien. Lo que no he podido hacer es ubicar a los primeros 3 hijos justo debajo de "Comandante de incidentes". Se ramifican a izquierda y derecha. Además, tenga en cuenta cómo los bordes se comparten en los 8 nodos superiores. ¿Es posible con dot? Puedo ocuparme de todo lo demás pero no de esos nodos superiores. ¿Alguien puede darme una pista para resolver esto?


Dos técnicas útiles para reproducir diseños de gráficos son:

  • Nodos invisibles
  • Clasificaciones de rango

Aquí hay una prueba rápida para los nodos superiores:

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; }

Y aquí está el resultado:


La representación nativa de Graphviz (punto) no admite el estilo de representación del organograma utilizado en el original. Si bien puede generar bordes ortogonales (como se muestra), no hay forma de agrupar los bordes. La estratificación vertical se puede lograr con minlen .

La respuesta aceptada es algo así como un abuso de la notación, pero en conjunto es un enfoque razonable.

Los cambios a la solución suministrada son:

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];