Узловые позиции в Графвизе - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь настроить следующий график так, чтобы «old_view» и «new_views» имели одинаковый ранг в верхней части, а «old_submits &« new_sub »находились в том же ранге в нижней части.'Continues' будет находиться между двумя рядами.

Я пытался использовать подграфы, как предлагали другие, но это мне не помогло.

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 голосов
/ 09 апреля 2019

Чистый graphviz намек, который вы сможете легко перенести в python:

Если вы хотите «пропустить» уровень, у вас есть две возможности (как минимум):

Вы можете использовать пустой узел - недостатком является то, что вы должны определить этот пустой узел b, и что у вашего ребра, указывающего от a до b, не должно быть стрелки.Кроме того, если вы посмотрите внимательно, вы увидели пустой пиксель на пути от a до c.

Последний, который вы можете избежать, перенаправив дополнительный невидимый край с A на E наC, создавая не только необходимость в этом дополнительном ребре, но и в увеличении веса на ребре 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

...