在Graphviz中将集群放在相同的排名上

时间:2011-07-26 01:58:39

标签: graphviz

我希望这两个节点出现在同一级别上:

enter image description here

digraph G {
    subgraph cluster1 {
        label="Local Datacenter";
        router1;
        host1;
    }
    subgraph cluster2 {
        label="Remote Datacenter";
        router2;
        host2;
    }
    router1 -> router2;
    router2 -> host2;
    router1 -> host1;
}

我尝试过使用rank=samerank=min,但他们没有给我我需要的东西。

有趣的是,如果我设置rankdir=LR并注释掉两个路由器到主机的边缘,它会给我一个我想要的外观 - 但我想保持边缘不变。

2 个答案:

答案 0 :(得分:58)

您可以使用newrank图形属性(在GraphViz 2.30中添加)来激活新的排名算法,该算法允许为属于群集的节点定义rank=same

在顶部添加以下行:

newrank=true;

在群集定义之后添加以下行

{ rank=same; router1; router2; }

以下是结果图:

routers with same rank

答案 1 :(得分:32)

您可以简单地修改路由器之间的边缘:

router1 -> router2[constraint=false];

constraint表示是否应该在节点的排名中使用边缘。