如何对齐点文件中的子图

How to align subgraphs in dot files

我正在尝试使用点文件和 graphviz 对齐三个或更多子图。我认为我的问题最好用几个例子来说明:

我的第一次尝试:

digraph FutopJobFlow {
    rankdir=LR;
    node [shape=box]
    compound=true

    subgraph clusterA {label = " A ";
        A -> a1;
        a1 -> a2;
        a2 -> a3;
    }

    subgraph clusterB {label = " B ";
        B -> b1;
        b1 -> b2;
    }

    subgraph clusterC {label = " C ";
        C -> c1;
        c1 -> c2;
    }
    A -> B [lhead=clusterB];
    B -> C [lhead=clusterC];
    X -> A [lhead=clusterA];
    Y -> B [lhead=clusterB];
    Z -> C [lhead=clusterC];
}

得出这个结果:

这里的各个子图看起来像我想要的,但没有对齐。因此,我尝试使用命令 rank:

digraph FutopJobFlow {
    rankdir=LR;
    node [shape=box]
    compound=true

    subgraph clusterA {label = " A ";
        A -> a1;
        a1 -> a2;
        a2 -> a3;
    }

    subgraph clusterB {label = " B ";
        B -> b1;
        b1 -> b2;
    }

    subgraph clusterC {label = " C ";
        C -> c1;
        c1 -> c2;
    }

    {rank=same; A; B; C;}

    A -> B [lhead=clusterB];
    B -> C [lhead=clusterC];
    X -> A [lhead=clusterA];
    Y -> B [lhead=clusterB];
    Z -> C [lhead=clusterC];
}

这导致了这张图:

此处对齐看起来不错,但现在 'A'、'B' 和 'C' 不再位于子图中!

我尝试了其他几种方法来实现对齐,但 'A'、'B' 和 'C' 在它们各自的子图中,但没有成功。

有人可以帮忙吗?

@ Marapet - 感谢它现在几乎完美 - 当我添加 'constraint=false' 参数时它看起来像这样:

Graph with constraint parameter

如果子图 'A' 位于 'B' 之上,再次位于 'C'.

之上,那将是完美的

在图表的第一个版本中,您可以通过添加属性 constraint=false:

来禁用对 A-B 和 B-C 之间边的节点排名的影响
A -> B [lhead=clusterB, constraint=false];
B -> C [lhead=clusterC, constraint=false];

然后应对齐子图。