【问题标题】:Force linear layout of nodes in graphviz?在graphviz中强制节点的线性布局?
【发布时间】:2021-02-18 05:01:03
【问题描述】:

我正在使用 graphviz 生成一些 git 图形可视化。例如,我有一个如下所示的线性历史:

我想显示相同的历史记录,但显示远程头的注释。如果我只是将关系添加到图表中,我会得到:

我如何说服dot 将提交节点 (A - G) 在带有远程头的示例中布置成直线(如第一个示例)?

第二个示例的源代码如下所示:

digraph {
    rankdir=RL

    {
    A
    B
    C
    D
    E
    F
    G
    }

    G->F->E->D->C->B->A

    {
    node [shape=box, style=filled, color=black, fontcolor=white]
    master
    }

    master->G

    {
    node [shape=box, style=filled, color=grey, fontcolor=white]
    "origin/HEAD"
    "origin/master"
    "origin/topic1"
    "origin/topic2"
    }

    "origin/HEAD" -> B
    "origin/master" -> B
    "origin/topic1" -> D
    "origin/topic2" -> F
}

更新 1

看起来像在边缘设置weight=0,像这样:

"origin/HEAD" -> B [weight=0]
"origin/master" -> B [weight=0]
"origin/topic1" -> D [weight=0]
"origin/topic2" -> F [weight=0]

让我更接近:

这让我得到了提交节点的线性布局;现在我需要弄清楚如何减少将远程头连接到相应提交的那些边缘的长度(并理想地保持提交节点之间的间距相等)。

更新 2

继续往墙上扔东西,如果我还为这些边缘设置constraint=false,它们将不再影响提交节点的间距:

"origin/HEAD" -> B [weight=0, constraint=false]
"origin/master" -> B [weight=0, constraint=false]
"origin/topic1" -> D [weight=0, constraint=false]
"origin/topic2" -> F [weight=0, constraint=false]

如果不是修改我为提交节点设置rankdir=TBrank=same 的边,我会更接近:

这里的问题是现在节点的从左到右的定位不正确(我们再次在节点之间有不同的间距)。

【问题讨论】:

    标签: git graphviz


    【解决方案1】:

    乔治,我想我明白了。

    答案是在提交节点上设置group属性,像这样:

    digraph {
        rankdir=RL
        edge [weight=2]
    
        {
        node [group=commits]
        A
        B
        C
        D
        E
        F
        G
        }
    
        G->F->E->D->C->B->A
    
        {
        node [shape=box, style=filled, color=black, fontcolor=white]
        master
        }
    
        master->G
    
        {
        node [shape=box, style=filled, color=grey, fontcolor=white]
        "origin/HEAD"
        "origin/master"
        "origin/topic1"
        "origin/topic2"
        }
    
        "origin/HEAD" -> B
        "origin/master" -> B
        "origin/topic1" -> D
        "origin/topic2" -> F
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2012-07-02
      • 2014-01-15
      相关资源
      最近更新 更多