在graphviz点有向图中,如何打破宽布局(rankdir LR)
使用python,我试图生成一个长图,其中始终有一个节点指向下一个节点。这最终会产生一长串节点(rankdir-LR)。但是我想在某个宽度、数量或节点后将其打断。如何才能做到这一点在graphviz点有向图中,如何打破宽布局(rankdir LR),graphviz,dot,Graphviz,Dot,使用python,我试图生成一个长图,其中始终有一个节点指向下一个节点。这最终会产生一长串节点(rankdir-LR)。但是我想在某个宽度、数量或节点后将其打断。如何才能做到这一点 graph = gv.Digraph(format='svg') graph.graph_attr.update({'rankdir': 'LR'}) graph.node('a', 'A') graph.node('b', 'B') graph.node('c', 'C') graph.node('d', 'D'
graph = gv.Digraph(format='svg')
graph.graph_attr.update({'rankdir': 'LR'})
graph.node('a', 'A')
graph.node('b', 'B')
graph.node('c', 'C')
graph.node('d', 'D')
graph.node('e', 'E')
graph.node('f', 'F')
...
graph.edges(['ab', 'bc', 'cd', 'de', 'ef', ...])
输出:
但是我想要(或类似):
我尝试使用大小,但这只会放大整个图形
作为一名工作狂,我试图减少ranksep,但这只会让更多的物品变得更好
我也搜索了很多,但没有找到合适的答案。
一个类似方向的未回答问题是:
.
对于其他相关问题,但这在这里也不起作用
更新: 我根据@vaettchen的评论修改了边缘代码:
graph.edge('a', 'b', None, {'weight':'5'})
graph.edge('b', 'c', None, {'weight':'5'})
graph.edge('d', 'e', None, {'weight':'5'})
graph.edge('e', 'f', None, {'weight':'5'})
graph.edge('c', 'd', None, {'weight':'1'})
graph.edge('a', 'd', None, {'style':'dashed', 'rank':'same'})
不幸的是,结果现在看起来是这样的(为了更好的可见性,样式是“虚线”而不是“Invi”):
“等级”:“相同”似乎不会改变任何东西。同样,当应用于节点A和D时。这应该是一个注释,而不是答案,因为它没有解决python问题,我猜您也在寻找更“自动”的东西,但可能它给出了一些想法;由于没有其他人接受,这里有一个纯粹的graphviz建议:
digraph so
{
// graph attributes
rankdir = LR; // horizontal graph
splines = ortho // edges with "corners"
// default/initial node style
node[ shape = box ];
// nodes where the "new lines" begin
// connected invisibly to keep them in order
{ rank = same; A -> E -> I[ style = invis ] }
// nodes that are to be in one line
// extra weight needed to keep the edges straight
edge[ weight = 5 ];
A -> B -> C -> D;
E -> F -> G -> H;
I -> J -> K -> etc;
// edges connecting the graph elements over the lines
edge[ weight = 1 ];
D -> E;
H -> I;
}
屈服
谢谢。我会检查它,如果它能正常工作,我会在这里发布python语法。我更改了我的边缘,但是它没有按预期显示(将更新问题),这很奇怪。当
A
和D
处于相同的等级时,它们必须在图形中处于相同的高度-这就是rank=same
的全部目的。可能是Python中的语法问题-如何/在何处放置rank=same
指令?