如何使用GraphViz DOT创建循环图?

6

我尝试使用以下DOT输入文件创建一个简单的循环图:

digraph {
    rankdir=LR;

    node0 [label = "0",  group="bottom"]; 
    node1 [label = "1", group="bottom"]; 
    node2 [label = "2", group="top"]; 
    node3 [label = "3", group="top"]; 

    node0 -> node1; 
    node1 -> node0; 

    node2 -> node3; 
    node3 -> node2; 
}

目前为止,一切都很顺利,结果如下:

第一次尝试循环图

但现在我想在节点之间添加以下关系:

node0 -> node3; 
node3 -> node0; 

node2 -> node1; 
node1 -> node2; 

令人惊讶的是,这导致了以下结果:

水平节点位置不满意

如果我去掉 rankdir=LR;,我得到一个垂直的图。我需要一个简单的循环图,因为空间中节点的位置与它们相关联的内容有联系。因此,新的连接应该是垂直的,而节点应该形成一个正方形。使用DOT可以实现这个目标吗?

2个回答

5

使用DOT可能可以实现,但我已经有几年没有用它了,所以我有点生疏。但是,如果您使用dot的姐妹程序circo,则可以将数据呈现为整齐的钻石形,这应该是标准GraphViz安装的一部分。


3

使用点的一种方式是将节点分为两行进行排序:

digraph {
     0 -> {1 3}
     1 -> {0 2}
     2 -> {3 1}
     3 -> {2 0}
     // Put specified nodes on same row:
     {rank=same; 0; 1}
     {rank=same; 2; 3}
}


Formatted Graph


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接