2017-08-02 103 views
1

这是我想要创建的graphviz digraph的代码。下面创建一个示例图像,我想用'e'切换节点'a',并且需要用'd'切换节点'b'。我曾尝试在代码和其他内容中改变自己的立场。我现在拥有的和我期望的例子在下面的链接中。我需要切换Graphviz中两个节点的位置

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

回答

1

我非常接近这个实现,但仍然很难与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; 
} 

enter image description here

+0

如何对齐'e'? –

+1

@MichaelDiCioccio我不知道,我的朋友。我今天早上尝试并尝试过。我知道,为什么它被呈现出来,这真是奇怪。 – TomServo

+1

这是疯了,谢谢。我会试着从你的答案中找出答案,但从技术上讲,你确实回答了我的问题,所以这会得到绿色检查。 –

1

我纠正我上面的代码,并与@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拉回到事物的循环中。

Correct Image (give or take a few curved lines)