为什么自上而下的graphviz点图是逆时针排列的?

为什么自上而下的graphviz点图是逆时针排列的?,graphviz,dot,Graphviz,Dot,我用图形和更多细节更新了问题。多亏了marapet,没有黑客的帮助,我无法生成所需的图像效果。 为什么这个代码会生成这个图 digraph { rankdir = TB; 1 -> 2 -> 3 -> 1; } 我怎样才能让graphviz/dot产生这样的顺时针方向 更新 这是我想要生成的最后一个图形(afaik逻辑上按这种方式更正) 这就产生了这个结果 当我想要这个的时候 谢谢 为什么这个代码会生成这个图 digraph { rankdir = TB; 1

我用图形和更多细节更新了问题。多亏了marapet,没有黑客的帮助,我无法生成所需的图像效果。

为什么这个代码会生成这个图

digraph {
 rankdir = TB;
 1 -> 2 -> 3 -> 1;
}

我怎样才能让graphviz/dot产生这样的顺时针方向

更新

这是我想要生成的最后一个图形(afaik逻辑上按这种方式更正)

这就产生了这个结果

当我想要这个的时候

谢谢

为什么这个代码会生成这个图

digraph {
 rankdir = TB;
 1 -> 2 -> 3 -> 1;
}
有向图根据节点之间的关系将其节点放在不同的列上。因为1比2,所以它必须在2以上,因为2比3,所以它必须在3以上。 但由于3也指向1,圆就完成了——3个节点中的任何一个都可以位于顶部。Graphviz只是将第一个提到的节点放在顶部。因此,如果你改写:

2 -> 3 -> 1 -> 2;
使用时,节点2将位于顶部

3 -> 1 -> 2 -> 3;
节点3将是顶部节点

布局引擎
neato
可能更适合此图形,生成顺时针方向的图形:

如果您必须使用点布局引擎,请使用以下点代码

digraph {
  rankdir = TB;
  1 -> 2;
  3 -> 2 [dir=back];
  3 -> 1;
  {rank=same; 2; 3;}
}
通过将边2->3更改为3->2,同时反转箭头方向,生成所需的输出

或者,同样技术的另一个变体,更容易解释:我们颠倒所有箭头的顺序(1->3->2->1),但向后显示它们(dir=back),并强制节点2和3位于同一列:

rankdir = TB;
edge[dir=back];
1 -> 3 -> 2 -> 1;
{rank=same; 2;3;}
这种黑客行为会产生以下结果:


谢谢你的解释。我在乳胶中使用dottex。老实说,我在graphviz/dot/neato或任何我需要的方面几乎没有经验。如果我写
layout=neato
图表就会乱七八糟。但是你刚才提到的黑客帮了我一把。虽然我知道这可能不是“正确”的答案,但这正是我现在所需要的。感谢您的
[dir=back]
技巧,它帮助我在Sphinx中创建了所需的图形布局(默认情况下使用点布局引擎)。
[dir=back]
让您可以控制系统图形,其中反馈路径通常位于底部,方向相反。参见:.
1->2->3->4->1;{rank=same;2;4}
也会生成一个逆时针方向的图形,但它很可能是顺时针方向的。您是否正在寻找如何以“正确”的方式进行此操作的答案?我99%确信没有“魔法”指令能自动产生这个输出,而任何其他可能实现所需输出(不可见节点等)的指令都比反转边缘方向要“黑客”得多。Graphviz的优势在于自动布局图,从左到右布局节点对我来说似乎是正确的。如果你需要手动微调它们,其他工具可能会更有用,更快地实现结果。然后我不再搜索“正确”的方法:)我只是想,因为所有东西都是逆时针排列的(afaik),必须有一个设置来反转。但是如果没有边缘方向,我真的可以恢复边缘方向。还有一个相关的问题