web-dev-qa-db-ja.com

DOTで同じレベルにノードを配置するにはどうすればよいですか?

複数のツリーを同時にレンダリングし、すべてのルートノードとすべてのリーフノードを同じレベルに配置します。

これが私がやろうとしていることの例です。ルートノードAとXは同じレベルにあり、リーフノードB、D、およびZも同じレベルにあります。

Graph I want

次のように、あるランクにルートを置き、別のランクに残すことを試みましたが、失敗しました

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

そして、すべてが同じランクにあるこの結果を得ました。 enter image description here

私がしようとしていることについて何か提案はありますか?私はすでに根と葉が特定されています。

33
Thalecress

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 */
}

...望ましい結果が得られます。

enter image description here

53
Simon

@William John Holdenのコメントに触発された簡単な例を次に示します-

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

graph

0
Brian Burns