Я пытаюсь создать соединение подграфов с графизом в иерархии с точечным движком. Этот код работает с движком 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)