我正在尝试生成有向图。
我目前用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属性,这样我就可以在不破坏连接弧的对齐的情况下添加析取弧吗?
答案 0 :(得分: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;
}