【问题标题】:GraphViz - maintain digraph alignment when adding disjunctive edgesGraphViz - 添加分离边时保持有向图对齐
【发布时间】:2018-02-16 11:36:45
【问题描述】:

我正在尝试生成有向图。

我当前使用 DOT 语言的 graph.c 代码:

digraph G {

rankdir = LR;
splines = line;

subgraph start{
start -> J0M0;
start -> J1M2;
start -> J2M0;
start -> J3M0;
}

subgraph J0 {
    J0M0 -> J0M1;
    J0M1 -> J0M2;
    J0M2 -> J0M3;
}

subgraph J1 {
    J1M2 -> J1M0;
    J1M0 -> J1M1;
    J1M1 -> J1M3;
}

subgraph J2 {
    J2M0 -> J2M1;
    J2M1 -> J2M2;
    J2M2 -> J2M3;
}

subgraph J3 {
    J3M0 -> J3M2;
    J3M2 -> J3M3;
    J3M3 -> J3M1;
}

{rank=same;}

J1M3 -> JE;
J0M3 -> JE;
J2M3 -> JE;
J3M1 -> JE;

 //    J0M0 -> J2M0;
 //    J0M1 -> J2M1;
 //    J0M3 -> J2M3;
 //    J1M2 -> J0M2;
 //    J2M0 -> J3M0;
 //    J2M1 -> J3M1;
 //    J2M2 -> J1M2;
 //    J2M3 ->J1M3;
 //    J3M0 -> J1M0;
 //    J3M2 -> J2M2;
 //    J3M3 -> J0M3;
 //    J3M1 -> J1M1;
}

这给了我以下输出:

我的目标是包含注释掉的边,但是添加它们会导致图表失去对齐并最终到处都是。

目标是这样的:

谁能帮忙解释一下有用的graphviz/dot属性,这样我就可以在不破坏连接弧对齐的情况下添加分离弧?

【问题讨论】:

    标签: graph graphviz dot


    【解决方案1】:

    一些可能性:

    • 使用group建议每个子图的所有节点的直线(如果可能,相同组的节点布置在直线上)
    • constraint=false 用于“分离”边缘
    • 当然还有splines=false 用于平滑边缘

    导致:

    digraph G {
    
    rankdir = LR;
    splines = true;
    start;
    JE;
    
    J0M0[group=a];
    J1M2[group=b];
    J2M0[group=c];
    J3M0[group=d];
    
    subgraph start{
    start -> J0M0;
    start -> J1M2;
    start -> J2M0;
    start -> J3M0;
    }
    
    node[group=a];
    subgraph J0 {
        J0M0 -> J0M1;
        J0M1 -> J0M2;
        J0M2 -> J0M3;
    }
    
    node[group=b];
    subgraph J1 {
        J1M2 -> J1M0;
        J1M0 -> J1M1;
        J1M1 -> J1M3;
    }
    
    node[group=c];
    subgraph J2 {
        J2M0 -> J2M1;
        J2M1 -> J2M2;
        J2M2 -> J2M3;
    }
    
    node[group=d];
    subgraph J3 {
        J3M0 -> J3M2;
        J3M2 -> J3M3;
        J3M3 -> J3M1;
    }
    
    {rank=same;}
    
    J1M3 -> JE;
    J0M3 -> JE;
    J2M3 -> JE;
    J3M1 -> JE;
    
    edge[constraint=false];
         J0M0 -> J2M0;
         J0M1 -> J2M1;
         J0M3 -> J2M3;
         J1M2 -> J0M2;
         J2M0 -> J3M0;
         J2M1 -> J3M1;
         J2M2 -> J1M2;
         J2M3 ->J1M3;
         J3M0 -> J1M0;
         J3M2 -> J2M2;
         J3M3 -> J0M3;
         J3M1 -> J1M1;
    }
    

    【讨论】:

    • constraint=false 是良药。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2021-06-19
    • 2021-05-06
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多