【问题标题】:Grouping Edges in DOT (Graphviz)DOT 中的边分组(Graphviz)
【发布时间】:2017-12-08 17:19:43
【问题描述】:

有没有办法在 DOT/Graphviz 中将边缘组合成一条总线,同时仍然在节点附近磨损边缘?

例如:

改变这个:

graph my_graph {
    rankdir=LR
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- B;
    A -- C;
}

变成这样:

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

    一种方法是使用虚拟[shape=point] 节点,如下所示:

    graph my_graph {
        rankdir=LR;
        {rank = same; B; C;}
        aa [ shape=point ];
        bb [ shape=point ];
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
        A -- aa;
    
        aa -- bb [ penwidth=4.0];
    
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
        bb -- B;
    
        A -- C;
    }
    

    这有一些缺点:

    1. 它会使源文件中的边数增加一倍,并且难以管理。
    2. 如果您有头部和尾部标签,则需要相应地放置它们。
    3. 它弄乱了您的节点等级,因此您必须手动调整所有其他节点。
    4. 磨损的末端仍然是圆形的,占用了大量空间。这可以通过设置splines 属性来解决,但我无法让它工作(无论splines 的值是多少,两个节点之间的多条边似乎总是显示为样条线) .

    另一种选择:

    还有concentrate 属性,但这将收集到同一点的行。它不会 1) 磨损或 2) 增加线条粗细来代表总线:

    graph my_graph {
        rankdir=LR
        concentrate=true;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- B;
        A -- C;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多