GraphViz Node Placement and Rankdir

前端 未结 2 530
遇见更好的自我
遇见更好的自我 2020-12-04 12:01

I\'m having very good luck with graphviz and have been able to make nearly every graph that I need. I\'m trying to duplicate this:

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

相关标签:
2条回答
  • 2020-12-04 12:48

    The native Graphviz (dot) rendering does not support the organogram rendering style used in the original. While it can generate orthogonal edges (as shown), there is no way to automate the grouping of edges. The vertical layering can be achieved with minlen.

    The accepted answer is somewhat of an abuse of the notation, but altogether a reasonable approach. It will likely be difficult to automate and the recommended WYSIWIG alternative is likely to be simplest.

    The changes to the supplied solution are:

    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];
    
    0 讨论(0)
  • 2020-12-04 13:02

    Two useful techniques for reproducing graph layouts are:

    • Invisible nodes
    • Rank constraints

    Here's a quick try for the top nodes:

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

    And here's the result:

    dot layout top nodes

    0 讨论(0)
提交回复
热议问题