为什么自上而下的graphviz点图是逆时针排列的?
我用图形和更多细节更新了问题。多亏了marapet,没有黑客的帮助,我无法生成所需的图像效果。 为什么这个代码会生成这个图为什么自上而下的graphviz点图是逆时针排列的?,graphviz,dot,Graphviz,Dot,我用图形和更多细节更新了问题。多亏了marapet,没有黑客的帮助,我无法生成所需的图像效果。 为什么这个代码会生成这个图 digraph { rankdir = TB; 1 -> 2 -> 3 -> 1; } 我怎样才能让graphviz/dot产生这样的顺时针方向 更新 这是我想要生成的最后一个图形(afaik逻辑上按这种方式更正) 这就产生了这个结果 当我想要这个的时候 谢谢 为什么这个代码会生成这个图 digraph { rankdir = TB; 1
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),必须有一个设置来反转。但是如果没有边缘方向,我真的可以恢复边缘方向。还有一个相关的问题