Graphviz: how to have sub-graph nodes lined-up in a straight line?

前端 未结 2 1395
攒了一身酷
攒了一身酷 2020-12-25 08:39

I\'m trying to visualize the history of my source-code repository using Graphviz in the following fashion (top-to-bottom or left-to-right doesn\'t matter):

m1         


        
相关标签:
2条回答
  • 2020-12-25 09:27

    The simplest solution is to set the weight of the branching and merging edges to 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 changes the layout from top-bottom to left-right.

    graphviz graph

    See also my answers to a similar question: Forcing "main line" nodes into a straight line in Graphviz (or alternatives)

    0 讨论(0)
  • 2020-12-25 09:28

    You can use the attribute setting rank=same

    I think your particular graph gets arranged in two perfect lines anyway, but if it were more complicated, you can see the effect.

    Add two more connections, for example.

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

    Now to make that new resultant graph look better, try the following.

     { 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    
    

    0 讨论(0)
提交回复
热议问题