GraphViz-添加析取边时保持有向图对齐
我正在尝试生成一个有向图 我的当前图形.c代码(DOT语言):GraphViz-添加析取边时保持有向图对齐,graph,graphviz,dot,Graph,Graphviz,Dot,我正在尝试生成一个有向图 我的当前图形.c代码(DOT语言): digraph G { rankdir = LR; splines = line; subgraph start{ start -> J0M0; start -> J1M2; start -> J2M0; start -> J3M0; } subgraph J0 { J0M0 -> J0M1; J0M1 -> J0M2; J0M2 -> J0M3; } sub
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属性吗?这样我就可以在不破坏连接弧对齐的情况下添加分离弧了?一些可能性:
- 使用
建议每个子图的所有节点的一条直线(如果可能,具有相同组的节点以直线布置)group
- 对“析取”边使用
constraint=false
- 当然,
用于平滑边spline=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是解决方法。谢谢您!