【问题标题】:Placing clusters on the same rank in Graphviz在 Graphviz 中将集群置于同一等级
【发布时间】:2011-10-13 01:23:26
【问题描述】:

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

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 并注释掉两个路由器到主机的边缘,它会给出我想要的外观 - 但我想保持边缘完整。

【问题讨论】:

    标签: graphviz


    【解决方案1】:

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

    在顶部添加以下行:

    newrank=true;
    

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

    { rank=same; router1; router2; }
    

    这是结果图:

    【讨论】:

    • 这个未记录的newrank 事情也解决了我的(相关但不同的)问题——试图通过在集群中的节点之间放置一个不可见的边缘来将集群放在不同的行上。如果没有newrank,这将按预期工作...提供您定义“普通”子图(其名称不以“集群”开头)。如果你把它们做成集群,突然点不介意在同一等级的节点之间有边!呃。
    • 这比constraint=false 方法更直观,结果可预测。谢谢你。
    • constraint = false 不适用于大图。它把它放在西伯利亚的某个地方,而不是紧挨着它。
    【解决方案2】:

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

    router1 -> router2[constraint=false];
    

    constraint表示是否在节点排序中使用边。

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多