我需要在 Graphviz 中切换两个节点的位置
I need to switch the position of two nodes in Graphviz
这是我要创建的 graphviz 有向图的代码。下面是创建的示例图像,我想用 'e' 切换节点 'a',我需要用 'd' 切换节点 'b'。我也尝试过改变他们在代码和其他方面的位置。我目前拥有的和我想要的例子在下面的链接中。
digraph {
graph[nodesep=1.75, ranksep=1.25, pad=".5", rankdir=LR];
node[shape=circle];
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
{rank=min; F};
{rank=same; A; E};
{rank=same; B; D};
{rank=max; C};
F -> {D};
A -> {B D F};
E -> {D F};
B -> {C F};
D -> {B};
C -> {D};
}
Current Plot
Desired Plot
虽然仍然很难将 E 与 D 水平对齐,但我已经非常接近这个实现了。但是这个方案使用根据等级强制执行顺序的不可见定向链接按照您指定的顺序获取节点。
digraph {
rankdir=LR;
node[shape=circle];
nodesep=1.75; ranksep=1.25; pad=0.5;
{rank=same; rank=min; F; }
{rank = same; A -> E [style=invis]; }
{rank= same; B -> D [style=invis]; }
{rank=same; rank=max; C;}
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
A -> B;
A -> D;
A-> F;
B-> C;
B-> F;
C-> D;
D-> B;
F-> D;
nodesep=0.75;
E -> D;
E-> F;
}
我更正了上面的代码并结合@JLH 的回答解决了我自己的问题。
digraph {
graph[nodesep=1, ranksep=1, pad=".5"];
rankdir="LR";
node[shape=circle];
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
{rank=min; F};
{rank=same; A E}
{rank=same; B D}
{rank=max; C};
F -> {D};
A -> {B D F};
E -> {D F};
B -> {C F}
D -> {B};
C -> {D};
edge[style=invis];
A -> E
E -> B
B -> D
}
答案的关键是在 E 和 B 之间添加一个无形的连接,将 E 拉回到事物的循环中。
这是我要创建的 graphviz 有向图的代码。下面是创建的示例图像,我想用 'e' 切换节点 'a',我需要用 'd' 切换节点 'b'。我也尝试过改变他们在代码和其他方面的位置。我目前拥有的和我想要的例子在下面的链接中。
digraph {
graph[nodesep=1.75, ranksep=1.25, pad=".5", rankdir=LR];
node[shape=circle];
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
{rank=min; F};
{rank=same; A; E};
{rank=same; B; D};
{rank=max; C};
F -> {D};
A -> {B D F};
E -> {D F};
B -> {C F};
D -> {B};
C -> {D};
}
Current Plot
Desired Plot
虽然仍然很难将 E 与 D 水平对齐,但我已经非常接近这个实现了。但是这个方案使用根据等级强制执行顺序的不可见定向链接按照您指定的顺序获取节点。
digraph {
rankdir=LR;
node[shape=circle];
nodesep=1.75; ranksep=1.25; pad=0.5;
{rank=same; rank=min; F; }
{rank = same; A -> E [style=invis]; }
{rank= same; B -> D [style=invis]; }
{rank=same; rank=max; C;}
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
A -> B;
A -> D;
A-> F;
B-> C;
B-> F;
C-> D;
D-> B;
F-> D;
nodesep=0.75;
E -> D;
E-> F;
}
我更正了上面的代码并结合@JLH 的回答解决了我自己的问题。
digraph {
graph[nodesep=1, ranksep=1, pad=".5"];
rankdir="LR";
node[shape=circle];
F[label=f];
A[label=a];
E[label=e];
B[label=b];
D[label=d];
C[label=c];
{rank=min; F};
{rank=same; A E}
{rank=same; B D}
{rank=max; C};
F -> {D};
A -> {B D F};
E -> {D F};
B -> {C F}
D -> {B};
C -> {D};
edge[style=invis];
A -> E
E -> B
B -> D
}
答案的关键是在 E 和 B 之间添加一个无形的连接,将 E 拉回到事物的循环中。