如何在点文件中对齐子图

时间:2015-10-08 20:45:21

标签: alignment graphviz subgraph

我正在尝试使用点文件和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];
}

给出这个结果:

First try of aligning subgraphs

这里各个子图看起来像我想要但是没有对齐。因此,我尝试了命令级别:

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];
}

导致此图表: Second try of aligning subgraphs

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

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

有人可以帮忙吗?

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

Graph with constraint parameter

如果子图“A”高于'B'并再次高于'C',那将是完美的。

1 个答案:

答案 0 :(得分:1)

在图表的第一个版本中,您可以通过添加属性constraint=false来禁用A-B和B-C之间边缘的节点排名效果:

A -> B [lhead=clusterB, constraint=false];
B -> C [lhead=clusterC, constraint=false];

然后应该将子图对齐。