Python Графы Graphviz, связанные с движком Dot для иерархического рендеринга - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь создать соединение подграфов с графизом в иерархии с точечным движком. Этот код работает с движком fdp, но не с точкой. Кто-нибудь знает, как это сделать с помощью точечного движка?

Обновление:

Код, который решает эту проблему с точечным движком. Это включает использование ltail и lhead:

from graphviz import Digraph

g = Digraph('G', filename='cluster')
g.attr(compound='true')
g.format = 'png'
g.attr(overlap="false", rankdir="LR")

with g.subgraph(name='cluster_0') as c:
    c.attr(color='lightgray', style='filled', )
    c.node_attr.update(style='filled')
    c.node('0', shape='note', label="a0")
    c.node('1', shape='note', label="a1")
    c.node('2', shape='note', label="a2")
    c.node('3', shape='note', label="a3")
    c.attr(label='process #0', fontname='helvetica')

with g.subgraph(name='cluster_1') as c:
    c.attr(color='lightgray', style='filled')
    c.node_attr['style'] = 'filled'
    c.node('4', shape='note', label="a0")
    c.node('5', shape='note', label="a1")
    c.node('6', shape='note', label="a2")
    c.node('7', shape='note', label="a3")
    c.attr(label='process #1')

with g.subgraph(name='cluster_2') as c:
    c.attr(color='lightgray', style='filled')
    c.node_attr['style'] = 'filled'
    c.node('8', shape='note', label="a0")
    c.node('9', shape='note', label="a1")
    c.node('10', shape='note', label="a2")
    c.node('11', shape='note', label="a3")
    c.attr(label='process #2')

with g.subgraph(name='cluster_3') as c:
    c.attr(color='lightgray', style='filled')
    c.node_attr['style'] = 'filled'
    c.node('12', shape='note', label="a0")
    c.node('13', shape='note', label="a1")
    c.node('14', shape='note', label="a2")
    c.node('15', shape='note', label="a3")
    c.attr(label='process #3')

with g.subgraph(name='cluster_4') as c:
    c.attr(color='lightgray', style='filled')
    c.node_attr['style'] = 'filled'
    c.node('16', shape='note', label="a0")
    c.node('17', shape='note', label="a1")
    c.node('18', shape='note', label="a2")
    c.node('19', shape='note', label="a3")
    c.attr(label='process #4')

with g.subgraph(name='cluster_5') as c:
    c.attr(color='lightgray', style='filled')
    c.node_attr['style'] = 'filled'
    c.node('20', shape='note', label="a0")
    c.node('21', shape='note', label="a1")
    c.node('22', shape='note', label="a2")
    c.node('23', shape='note', label="a3")
    c.attr(label='process #5')

g.edge('0', '4', ltail='cluster_0', lhead='cluster_1')
g.edge('0', '8', ltail='cluster_0', lhead='cluster_2')
g.edge('4', '12', ltail='cluster_1', lhead='cluster_3')
g.edge('4', '16', ltail='cluster_1', lhead='cluster_4')
g.edge('16', '23', ltail='cluster_4', lhead='cluster_5')

g.render(view=True, cleanup=True)

enter image description here

...