Graphviz:如何将子图节点排成一条直线?

时间:2011-03-10 12:48:51

标签: graphviz

我正在尝试使用Graphviz以下列方式可视化我的源代码存储库的历史记录(从上到下或从左到右无关紧要):

m1 -> m2 ----> m3 -----> m4 -> m5
    \                    ^
     \-> b1 -> b2 -> b3 -/

鉴于此点文件:

digraph git {
    subgraph master {
        m1 -> m2 -> m3 -> m4 -> m5
    }
    subgraph branch {
        m2 -> b1 // branch from master
        b1 -> b2 -> b3
        b3 -> m4 // merge into master
    }
}

我应该设置什么属性才能将子图的所有节点(属于同一个分支)放在一条直线上?

2 个答案:

答案 0 :(得分:15)

最简单的解决方案是将分支和合并边的weight设置为0:

digraph git {
    rankdir=LR
    subgraph master {
        m1 -> m2 -> m3 -> m4 -> m5
    }
    subgraph branch {
        m2 -> b1[weight=0] // branch from master
        b1 -> b2 -> b3
        b3 -> m4[weight=0] // merge into master
    }
}

rankdir=LR将布局从上到下更改为左右。

graphviz graph

另见我对类似问题的回答: Forcing "main line" nodes into a straight line in Graphviz (or alternatives)

答案 1 :(得分:3)

您可以使用属性设置rank = same

我认为你的特定图形无论如何都要排列成两条完美的线条,但如果它更复杂,你可以看到效果。

例如,

再添加两个连接。

// new complexity
m1 -> m5 
b3 -> b1    

现在,为了使新的结果图看起来更好,请尝试以下方法。

 { rankdir=LR ; rank=same ; m1; m2; m3; m4; m5 }
 { rankdir=LR ; rank=same ; b1; b2; b3 }

subgraph master { 
m1 -> m2 -> m3 -> m4 -> m5
}

subgraph branch { 
m2 -> b1 // branch from master
b1 -> b2 -> b3
b3 -> m4 // merge into master
}


// new complexity
m1 -> m5 
b3 -> b1