如何在graphviz中强制同一列中的所有节点?

时间:2009-09-25 09:05:45

标签: graph graphviz dot

我正在尝试使用graphviz对某个流进行建模,我无法弄清楚如何对下图进行建模以共享相同的水平中心

digraph exmp {
   A -> B -> C -> D
   C -> E [constraint=false]
   A -> C [style="dotted", constraint=false]
   A -> D [style="dotted",  constraint=false]
   B -> D [constraint=false]
   D -> A [style="dashed", constraint=false]
   C -> A [style="dashed", constraint=false]


   subgraph cluster_hackToSinkIt { E -> F }
   { rank="sink" E F }
}

这导致以下图表:

rendered image

我的问题是,我怎样才能得到E - > F位于D下面,是否位于同一列?

1 个答案:

答案 0 :(得分:28)

至少as of May 2007,你不能强制“列”本身,但你可以 权重应用于边缘这应该有助于强制对齐。但实际上,在这种情况下,如果你只是从D到E添加一个不可见的边缘,你就会有垂直对齐。

digraph exmp {
    A -> B -> C -> D
    C -> E [constraint=false]
    A -> C [style="dotted", constraint=false]
    A -> D [style="dotted",  constraint=false]
    B -> D [constraint=false]
    D -> A [style="dashed", constraint=false]
    C -> A [style="dashed", constraint=false]
    D -> E [style="invis"] // <---- important new line


    subgraph cluster_hackToSinkIt { E -> F }
    { rank="sink" E F }
}

fixed dot image

我不知道有任何方法强迫边缘到一边或另一边。