Graphviz 如何对齐节点列和包裹边?

Graphviz 如何对齐节点列和包裹边?,graphviz,dot,Graphviz,Dot,我可以使用以下代码生成图形: 文件test.dot: digraph g { {rank=same; 1 -> 2 -> 3 -> 4} {rank=same; 5 -> 6 -> 7 -> 8} {rank=same; 9 -> 10 -> 11 -> 12} 4 -> 5 8 -> 9 } dot test.dot-Tpng-o test.png 输出: 但是,我希望节点的列

我可以使用以下代码生成图形:

文件
test.dot

digraph g {
    {rank=same;  1 -> 2 -> 3 -> 4}
    {rank=same;  5 -> 6 -> 7 -> 8}
    {rank=same;  9 -> 10 -> 11 -> 12}

    4 -> 5
    8 -> 9
}
dot test.dot-Tpng-o test.png

输出:

但是,我希望节点的列更像这样对齐:


是否可以在
graphviz dot
中制作这样的图形?

使用不可见的边和强大的权重:

digraph g 
{
    splines="ortho"

    // connect the left most nodes and keep them one below the other
    1 -> 5 -> 9[ style = invis, weight = 10 ];

    // do your stuff
    { rank = same;  1 -> 2 -> 3 -> 4 }
    { rank = same;  5 -> 6 -> 7 -> 8 }
    { rank = same;  9 -> 10 -> 11 -> 12 }

    4 -> 5;
    8 -> 9;
}

yields