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

tma*_*ric 5 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; 
}
Run Code Online (Sandbox Code Playgroud)

到目前为止这么好,它导致:

首先尝试循环图

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

node0 -> node3; 
node3 -> node0; 

node2 -> node1; 
node1 -> node2; 
Run Code Online (Sandbox Code Playgroud)

而且令人惊讶的是,这会导致:

水平节点放置不令人满意

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

PM *_*ing 5

也许可以使用点来实现的; 我已经好几年没玩了,所以我有点生疏了。但是,如果您使用 dot 的姊妹程序 circo,您的数据将呈现为一个整齐的菱形,它应该是正常 GraphViz 安装的一部分。


kot*_*ane 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}
}


Run Code Online (Sandbox Code Playgroud)

格式化图表