Tree 我需要切换Graphviz中两个节点的位置

Tree 我需要切换Graphviz中两个节点的位置,tree,nodes,graphviz,Tree,Nodes,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]

下面是我试图创建的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};
}


我非常熟悉这个实现,尽管仍然很难将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;
}

我非常熟悉这个实现,尽管仍然很难将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 answer解决了自己的问题

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拉回到事物的循环中


我更正了上面的代码,并结合@JLH answer解决了自己的问题

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拉回到事物的循环中


如何对齐“e”?@MichaelDiCioccio我不知道,我的朋友。今天早上我试了又试。我意识到,这很奇怪,为什么它会被渲染出来。这太疯狂了,谢谢。我会试着从你的回答中找出答案,但从技术上来说,你确实回答了我的问题,所以这将得到绿色支票。我很感激。我通常从DOT得到我想要的,但我已经尝试了我能想到的一切,甚至删除了pad属性。祝你好运我刚开始使用Graphviz(DOT),它有非常可靠的文档,但当你遇到问题时,你似乎运气不佳,我该如何对齐“e”?@MichaelDiCioccio我不知道,我的朋友。今天早上我试了又试。我意识到,这很奇怪,为什么它会被渲染出来。这太疯狂了,谢谢。我会试着从你的回答中找出答案,但从技术上来说,你确实回答了我的问题,所以这将得到绿色支票。我很感激。我通常从DOT得到我想要的,但我已经尝试了我能想到的一切,甚至删除了pad属性。祝你好运我刚开始使用Graphviz(DOT),它有非常可靠的文档,但是当你遇到问题时,你就不走运了,看起来很开心