我有下面的图,我需要将聚类/子图从左到右排列为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 ];
}

layout - Graphviz:从左到右排列内容从上到下的群集-LMLPHP

最佳答案

在这种情况下,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 ];

}

关于layout - Graphviz:从左到右排列内容从上到下的群集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28913213/

10-12 21:34