Graphviz 如何将节点放置在点的同一级别上?

Graphviz 如何将节点放置在点的同一级别上?,graphviz,dot,Graphviz,Dot,我希望同时渲染多棵树,并将所有根节点和所有叶节点放置在同一级别上 这是一个我正在尝试做的例子。根节点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 subgrap

我希望同时渲染多棵树,并将所有根节点和所有叶节点放置在同一级别上

这是一个我正在尝试做的例子。根节点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 */
}
结果是所有的东西都在同一个等级上。


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

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 */
}
。。。给出了期望的结果:


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

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

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

对于复杂图,rank=same通常会在图的中间附近结束。如果你是指顶部和底部,就说顶部和底部

digraph G { 

  rankdir = TB;

  A -> B;
  A -> C -> D;
  X -> Y;

  { rank=min; A; X; }
  { rank=max; B; D; Y; }

}

这太棒了!我认为秩总是被指定为子图的一个属性,而不是它本身的一个语句。子图真的有必要吗?我对这个结果很满意:有向图{rankdir=LR;1902387216[label=“h”];1902387216->1736863396[label=“child”];1736863396[label=“e”];1736863396->166482735[label=“peer”];{rank=same;1736863396;166482735[label=“a”];166482735->915735320[label=“child”];915735320[label=“n”]@WilliamJohnHolden:我同意你的观点,子图并不是真的必要的。在最初的问题中,它可能是整个图表的一部分,其余部分被省略,以创建一个最小的示例。