How to force all nodes in the same column in graph

2020-02-21 21:56发布

I'm trying to model a certain flow using graphviz, and I can't figure out how to model the following graph to share the same horizontal center

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

this results in the following graph:

rendered image

My question is, how can I get the E -> F to be positioned under D such that is lies in the same column?

1条回答
在下西门庆
2楼-- · 2020-02-21 22:57

At least as of May 2007, you can't force "columns" per se, but you can apply weight to edges which should help force alignment. But actually, in this case, if you just add an invisible edge from D to E, you've got vertical alignment.

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

I'm not aware of any way to force edges to one side or another.

查看更多
登录 后发表回答