С помощью 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.node('e', 'E')
graph.node('f', 'F')
...
graph.edges(['ab', 'bc', 'cd', 'de', 'ef', ...])
Выход:
Однако я хочу (или похожий):
Я пытался использовать размер, но это только увеличивает масштаб всего графика.
В качестве обходного пути я пытался уменьшить ранчеп, но это только улучшило его еще на несколько предметов.
Я также много искал, но не смог найти подходящий ответ.
Вопрос без ответа, который идет в том же направлении:
График графика слишком широкий .
Для других связанных с этим вопросов предлагаемый ответ состоял в том, чтобы использовать невидимые элементы , но здесь это тоже не работает.
Обновление:
Я изменил код для ребер в соответствии с комментарием @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'})
К сожалению, результат теперь выглядит следующим образом (стиль «пунктир» вместо «invis» для лучшей видимости):
"rank": "same", кажется, ничего не меняет. Также применительно к узлам A и D.