如何用点将子图水平居中放置在彼此上方?

How to position subgraphs horizontally centered above each other with dot?

我的代码

digraph g
{
rankdir=RL
node
[shape = record, height=0.1];
subgraph
1
{
M_1; M_4; M_8; M_11;
}
subgraph
2
{
M_2; M_5; M_9;
}
subgraph
3
{
M_3; M_6; M_10;
}
subgraph
5
{
rank
=
same
M_2; M_3;
}
subgraph
8
{
rank
=
same
M_5; M_6; M_7;
}
subgraph
11
{
rank
=
same
M_10; M_9;
}
subgraph
12
{
rank
=
same
M_5; M_7; M_6;
}
M_1 -> M_4 [style=dotted, weight=100];
M_4 -> M_8 [style=dotted, weight=100];
M_8 -> M_11 [style=dotted, weight=100];
M_2 -> M_5 [style=dotted, weight=100];
M_5 -> M_9 [style=dotted, weight=100];
M_3 -> M_6 [style=dotted, weight=100];
M_6 -> M_10 [style=dotted, weight=100];
M_2 -> M_1;
M_4 -> M_2;
M_3 -> M_1;
M_4 -> M_3;
M_5 -> M_4;
M_6 -> M_4;
M_8 -> M_5;
M_8 -> M_6;
M_7 -> M_4;
M_8 -> M_7;
M_9 -> M_8;
M_10 -> M_8;
M_11 -> M_10;
M_11 -> M_9;
}

给出以下输出:

现在,我的问题是:

How can I center the lines $M_2, M_5, M_9$ and $M_1, M_4, M_8, M_{11}$ and $M_3, M_6, M_{10}$ horizontally?

由于 $M_5、M_6$ 和 $M_7$ 被迫具有相同的排名,以及 $M_2$ 和 $M_3$ 等等,这最终应该会给出一张漂亮的图片,其中节点的框以看起来非常对称的方式放置。

有没有办法用点来做到这一点?

感谢您的帮助!

相同group中的节点被放置在一条直线上。如果给定正确的 dir 属性,您所有的优势都有助于排名。

digraph g
{
    rankdir=RL
    node [shape = record, height=0.1];
    subgraph {
        node [group=2]
        M_2; M_5; M_9;
    }
    subgraph {
        node [group=1]
        M_1; M_4; M_8; M_11;
    }
    subgraph {
        node [group=3]
        M_3; M_6; M_10;
    }
    M_7;
    subgraph {
        edge [style=dotted]
        M_1 -> M_4;
        M_4 -> M_8;
        M_8 -> M_11;
        M_2 -> M_5;
        M_5 -> M_9;
        M_3 -> M_6;
        M_6 -> M_10;
    }
    subgraph {
        edge [dir=back]
        M_1 -> M_2;
        M_2 -> M_4;
        M_1 -> M_3;
        M_3 -> M_4;
        M_4 -> M_5;
        M_4 -> M_6;
        M_5 -> M_8;
        M_6 -> M_8;
        M_4 -> M_7;
        M_7 -> M_8;
        M_8 -> M_9;
        M_8 -> M_10;
        M_10 -> M_11;
        M_9 -> M_11;
    }
}

给予

通过添加一个不可见的虚拟节点并设置 ranksepnodesepspline,您可以进行一些漂亮的打印。

digraph g
{
    rankdir=RL
    ranksep=0.5
    nodesep=0.5
    splines=line
    node [shape = record, height=0.1];
    Dummy [style=invisible];
    subgraph {
        node [group=2]
        M_2; M_5; M_9;
    }
    subgraph {
        node [group=1]
        M_1; M_4; M_8; M_11;
    }
    subgraph {
        node [group=3]
        M_3; M_6; M_10;
    }
    M_7;
    subgraph {
        edge [style=dotted]
        M_1 -> M_4;
        M_4 -> M_8;
        M_8 -> M_11;
        M_2 -> M_5;
        M_5 -> M_9;
        M_3 -> M_6;
        M_6 -> M_10;
    }
    subgraph {
        edge [dir=back]
        M_1 -> M_2;
        M_2 -> M_4;
        M_1 -> M_3;
        M_3 -> M_4;
        M_4 -> M_5;
        M_4 -> M_6;
        M_5 -> M_8;
        M_6 -> M_8;
        M_4 -> M_7;
        M_7 -> M_8;
        M_8 -> M_9;
        M_8 -> M_10;
        M_10 -> M_11;
        M_9 -> M_11;
    }
    subgraph {
        edge [dir=none style=invisible]
        M_4 -> Dummy;
        Dummy -> M_8;
    }
}

给予