【问题标题】:How do I place nodes on the same level in DOT?如何在 DOT 中将节点放置在同一级别?
【发布时间】:2014-11-02 06:17:32
【问题描述】:

我想同时渲染几棵树,并将所有根节点和所有叶节点放在同一级别。

这是我正在尝试做的一个示例。根节点 A 和 X 处于同一级别,叶节点 B、D 和 Z 也是。

我尝试将根放在一个等级并离开另一个等级,但没有成功,如下所示:

digraph G { 
rankdir = TB;
subgraph {
A -> B
A -> C
C -> D
X -> Y
rank = same; A; X;
rank = same; B; D; Y;
} /* closing subgraph */
}

并且得到了这样的结果,即所有内容都处于同一等级。

关于我应该尝试什么的任何建议?我已经确定了根和叶。

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

    rank = same; ... 语句放在大括号中,例如:

    digraph G { 
      rankdir = TB;
      subgraph {
        A -> B
        A -> C
        C -> D
        X -> Y
        // note that rank is used in the subgraph
        {rank = same; A; X;}
        {rank = same; B; D; Y;}
      } /* closing subgraph */
    }
    

    ... 给出想要的结果:

    【讨论】:

    • 这太棒了!我认为排名总是被指定为子图的属性,而不是作为自身的陈述。
    • 子图真的有必要吗?我对这个结果很满意: digraph { rankdir=LR; 1902387216 [标签=“h”]; 1902387216 -> 1736863396 [标签=“孩子”]; 1736863396 [标签=“e”]; 1736863396 -> 166482735 [label="peer"]; {等级=相同; 1736863396; 166482735;}; 166482735 [标签=“一”]; 166482735 -> 915735320 [标签=“孩子”]; 915735320 [标签=“n”]; 915735320 -> 1424861798 [标签=“孩子”]; 1424861798 [标签=“d”]; 1736863396 -> 233979847 [标签=“孩子”]; 233979847 [标签=“r”]; }
    • @WilliamJohnHolden:我同意你的观点,子图并不是真正必要的。在最初的问题中,它可能是整个图表的一部分,其余部分被省略以创建一个最小的示例。
    【解决方案2】:

    理想的结构实际上是rank max和rank min。不需要子图或任何其他恶作剧。 GraphViz 对此有明确的设施。

    对于复杂的图表,rank=same 通常会出现在图表的中间附近。如果您指的是顶部和底部,请说顶部和底部。

    digraph G { 
    
      rankdir = TB;
    
      A -> B;
      A -> C -> D;
      X -> Y;
    
      { rank=min; A; X; }
      { rank=max; B; D; Y; }
    
    }
    

    【讨论】:

      【解决方案3】:

      这是一个受@William John Holden 评论启发的简单示例 -

      graph {
        rankdir=LR;
        a -- b -- c;
        d -- e -- f;
        b -- d; {rank = same; b; d;};
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多