GRAPHVIZ: принудительно переместить узел в начало страницы

#python #graphviz #pygraphviz

#python #graphviz #pygraphviz

Вопрос:

Я использую graphviz, однако я хотел бы поместить узел «Это сверху» в начало страницы, а не сбоку. Это график:

введите описание изображения здесь

Это код:

 g= Digraph('trial', filename='trial.gv')
g.attr(compound='true', rankdir="TB" )

with g.subgraph() as s:
  s.attr(rank='max')
  s.node('This on top ')
  s.edge('this right under', "Fabrication")

with g.subgraph(name='cluster0') as c:
    c.node("This")

    c.node("that")
    c.node("and this on the same level")
g.edge("this right under","that", lhead="cluster0" )
g.edge("that","This on top ", ltail="cluster0" )

g
  

Есть ли команда, чтобы убедиться, что узлы отображаются в ВЕРХНЕМ / нижнем порядке, который я желаю?

Ответ №1:

Первая проблема заключается в том, что настройка rank='max' заставляет все в первом подграфе переходить к максимальному рангу, который является самым низким рангом. Возможно, вы имели в виду установить rank='min' , какой из элементов в подграфе будет иметь наивысший ранг, но это все равно не создаст желаемого расположения.

Вместо этого вы можете использовать невидимое ребро, установив style = 'invis' при создании ребра, чтобы заставить «Это сверху» предшествовать «это прямо под».

 from graphviz import Digraph

g= Digraph('trial', filename='trial.gv')
g.attr(compound='true', rankdir="TB" )

with g.subgraph() as s:
  # s.attr(rank='min') # you don't need this line
  s.node('This on top ')
  s.edge('This on top ', 'this right under', style='invis') # add this invisible edge
  s.edge('this right under', "Fabrication")

with g.subgraph(name='cluster0') as c:
    c.node("This")

    c.node("that")
    c.node("and this on the same level")
g.edge("this right under", "that", lhead="cluster0" )
g.edge("that", "This on top ", ltail="cluster0", constraint="false" )

g
  

Что приводит к:
График, показывающий сложенные узлы