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

时间:2014-12-02 12:07:14

标签: dot

我尝试用这个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; 
}

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

First try at a cyclic graph

但现在我希望将以下关系添加到节点:

node0 -> node3; 
node3 -> node0; 

node2 -> node1; 
node1 -> node2; 

令人惊讶的是,这导致:

Unsatisfactory horizontal node placement

如果我删除rankdir=LR;,我会得到一张垂直图表。我需要一个简单的循环图,因为空间中的节点放置与它们的相关性有关。所以新连接应该是垂直的,节点应该形成一个正方形。这可以用DOT实现吗?

2 个答案:

答案 0 :(得分:3)

可能可以使用DOT实现;我好几年没玩过了,所以我有点生疏了。但是,如果您使用dot的姐妹程序circo,您的数据将呈现为一个整洁的钻石,这应该是正常GraphViz安装的一部分。

答案 1 :(得分:2)

点的一种方法是将节点排序为两行:

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