Graphviz中的节点位置

时间:2019-04-08 17:10:52

标签: graphviz pygraphviz

我正在尝试设置以下图形,以使“ old_view”和“ new_views”在顶部处于同一等级,而“ old_submits和“ new_sub”在底部处于同一等级。 “继续”将位于两行之间。

我已经尝试使用其他人建议的子图,但是这对我没有帮助。

c=Digraph('parent')

c.attr('graph', label='')
c.attr('node',fontname='helvetica')
c.attr('graph',fontname='helvetica')
c.attr('edge',fontname='helvetica')
c.attr('node', shape='box', color='lightgrey')
c.attr(rank='same')

c.node('old_views')
c.node('new_views')
c.node('continues')


g=Digraph('subgraph')
g.graph_attr.update(rank='same')
g.node('new_submits')
g.node('old_submits')

c.edge('new_views','continues')
c.edge('continues','new_submits')
c.edge('old_views','old_submits')

c.subgraph(g)

c

示例图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

纯粹的graphviz提示您应该可以轻松转移到python:

如果您要“跳过”一个级别,则有两种可能性(至少):

您可以使用一个空节点-缺点是您必须定义该空节点b,并且从a指向b的边不需要箭头。另外,如果仔细看,您会发现从ac的途中有一个空白像素。

您可以通过在A上将EC上路由一条额外的不可见边来避免这种情况,这不仅增加了对多余边的需求,而且增加了权重D -> E -> E边缘保持笔直。

digraph so 
{
    b[ shape = point, width = 0]
    a -> b[ dir = none ];
    b -> c;
    d -> e -> f;

    A -> C;
    A -> E -> C[ style = invis ];
    D -> E -> F[ weight = 10 ];
}

由您选择!

enter image description here