Graphviz:将聚类从左到右排列,内容从上到下

7
我有以下图表,需要将聚类/子图按照 G-H-K-M-N-O-P 的顺序从左到右排列。每个子图的内容保持不变。我该如何实现这一点?我尝试添加不可见边缘,但并没有按预期工作。
G/H 方框需要按正确顺序排列,但调整权重并没有成功……
下面的代码呈现了底部的图像。00/01 节点设置为可见以显示混乱的顺序位置。
digraph {
    {
        edge [ style=invis ];
        rank=same;
        00 [  ];
        01 [  ];
        02 [ style=invis ];
        03 [ style=invis ];
        04 [ style=invis ];
        05 [ style=invis ];
        06 [ style=invis ];
        00 -> 01 -> 02 -> 03 -> 04 -> 05 -> 06 [ weight=1000 ];
    }

    subgraph cluster_GG {
        label="Journal litra GG 1829";

        GG27 [ label="27" ];
        GG112 [ label="112" ];
        GG177 [ label="177" ];
        GG921 [ label="921" ];
    }

    subgraph cluster_HH {
        label="Journal litra HH 1830";

        HH800 [ label="800" ];
    }

    subgraph cluster_KK {
        label="Journal litra KK 1832";

        KK262 [ label="262" ];
        KK541 [ label="541" ];
        KK644 [ label="644" ];
        KK701 [ label="701" ];
    }

    subgraph cluster_MM {
        label="Journal litra MM 1834";

        MM113 [ label="113" ];
        MM122 [ label="122" ];
        MM183 [ label="183" ];
    }

    subgraph cluster_NN {
        label="Journal litra NN 1835";

        NN644 [ label="644" ];
    }

    subgraph cluster_OO {
        label="Journal litra OO 1836";

        OO47 [ label="47" ];
        OO159 [ label="159" ];
        OO197 [ label="197" ];
        OO253 [ label="253" ];
        OO1032 [ label="1032" ];
    }

    subgraph cluster_PP {
        label="Journal litra PP 1837";

        PP485 [ label="485" ];
    }

    GG27  -> { GG112 }
    GG112 -> { GG27 GG177 KK541 }
    GG177 -> { GG112 HH800 }
    KK541 -> { GG112 KK644 }
    KK644 -> { KK541 KK701 }
    KK701 -> { KK644 MM113 }
    MM113 -> { KK701 MM122 MM183 }
    MM122 -> { MM113 }
    MM183 -> { MM113 OO47 }
    OO47 -> { MM183 OO159 }
    OO159 -> { OO47 OO197 }
    OO197 -> { OO159 OO253 }
    OO253 -> { OO197 OO1032 }
    OO1032 -> { OO253 PP485 }

    KK262 [ color=blue ]
    MM122 [ color=blue ]
    NN644 [ color=blue ]

    GG921 [ color=red ]
    HH800 [ color=red ]
    PP485 [ color=red ]

    00 -> GG27 [  weight=100 ];
    01 -> HH800 [  weight=100 ];
    02 -> KK262 [ style=invis weight=100 ];
    03 -> MM113 [ style=invis weight=100 ];
    04 -> NN644 [ style=invis weight=100 ];
    05 -> OO47 [ style=invis weight=100 ];
    06 -> PP485 [ style=invis weight=100 ];
}

enter image description here

1个回答

5
在这种情况下,rankdir=LR 更好地工作,因为水平列更重要,而排名是唯一的排序机制。沿着等级正交排序可能通过出现顺序实现,对于特别是带有集群的复杂图形而言可能很难。
digraph {
    rankdir=LR;
    nodesep=0.5;
    edge [ constraint=false ];

    subgraph cluster_GG {
        label="Journal litra GG 1829";

        GG921 [ label="921" ];
        {
            rank=same;
            GG27 [ label="27" ];
            GG112 [ label="112" ];
            GG177 [ label="177" ];
        }

        GG921 -> GG27 [ constraint=true style=invis ];

        GG27 -> GG112 -> GG177;
        GG177 -> GG112 -> GG27;
    }

    subgraph cluster_HH {
        label="Journal litra HH 1830";

        HH800 [ label="800" ];
    }

    subgraph cluster_KK {
        label="Journal litra KK 1832";

        {
            rank=same;
            KK541 [ label="541" ];
            KK644 [ label="644" ];
            KK701 [ label="701" ];
        }
        KK262 [ label="262" ];

        KK541 -> KK262 [ constraint=true style=invis ];

        KK541 -> KK644 -> KK701;
        KK701 -> KK644 -> KK541;
    }

    subgraph cluster_MM {
        label="Journal litra MM 1834";

        {
            rank=same;
            MM113 [ label="113" ];
            MM122 [ label="122" ];
        }
        {
            rank=same;
            MM0 [ style=none ];
            MM183 [ label="183" ];
        }

        MM113 -> MM0 [ constraint=true style=invis ];
        MM122 -> MM183 [ constraint=true style=invis ];

        MM113 -> MM122 -> MM113;
        MM113 -> MM183 -> MM113;

    }

    subgraph cluster_NN {
        label="Journal litra NN 1835";

        NN644 [ label="644" ];
    }

    subgraph cluster_OO {
        label="Journal litra OO 1836";

        {
            rank=same;
            OO47 [ label="47" ];
            OO159 [ label="159" ];
            OO197 [ label="197" ];
            OO253 [ label="253" ];
            OO1032 [ label="1032" ];
        }

        OO47 -> OO159 -> OO197 -> OO253 -> OO1032;
        OO1032 -> OO253 -> OO197 -> OO159 -> OO47;
    }

    subgraph cluster_PP {
        label="Journal litra PP 1837";

        PP485 [ label="485" ];
    }

    // cluster external horizontal order
    GG27 -> HH800 -> KK541 [ constraint=true style=invis ];
    KK262 -> MM113 [ constraint=true style=invis ];
    MM0 -> NN644 -> OO47 -> PP485 [ constraint=true style=invis ];

    // cluster external
    GG177:e -> HH800;

    GG112 -> KK541:w;
    KK541 -> GG112;

    KK701 -> MM113:w;
    MM113 -> KK701;

    MM183 -> OO47:w;
    OO47 -> MM183;

    OO1032 -> PP485;

    KK262 [ color=blue ];
    MM122 [ color=blue ];
    NN644 [ color=blue ];

    GG921 [ color=red ];
    HH800 [ color=red ];
    PP485 [ color=red ];

}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接