在Python Graphviz中,据我所知,不能将子图用于节点排序和集群。是否有解决方案或解决方法?或者这是Graphviz或其Python实现的一个限制?集群似乎需要使用子图,我看到的唯一一个强制排名/节点排序的例子也使用子图
如果您不确定我所说的“节点顺序”是什么意思,下面是一个如何强制执行节点顺序的工作示例(在子图中使用rank=same): How can I control within level node order in graphviz's dot?
我试图模仿这个解决方案,但也加入了集群。当用于排序的子图被创建时,聚类似乎被破坏。从下面的代码中删除集群,示例的工作方式与上面的链接中的工作方式相同,删除代码的排序/排名部分和集群的工作方式很好。因此,似乎只有两者的结合才是问题的根源
也许有一些基本的东西我只是不明白
非常感谢您的帮助
from graphviz import Graph, Digraph, Source
myedges = [('A', 'D'),
('A', 'B'),
('A', 'C'),
('A', 'E'),
('B', 'F'),
('C', 'F'),
('F', 'G')]
r = Digraph('root', format='png', filename='testing.gv')
r.node('rank1')
r.node('rank2')
r.node('rank3')
r.edge('rank1', 'rank2')
r.edge('rank2', 'rank3')
with r.subgraph(name='cluster1') as c:
c.attr(color='red')
c.node('B')
c.node('D')
c.node('G')
with r.subgraph(name='cluster2') as d:
d.attr(color='red')
d.node('A')
d.node('C')
d.node('E')
d.node('F')
for e in myedges:
a, b = e
r.edge(a,b)
with r.subgraph() as s:
s.attr(rank='same')
s.edge('rank2', 'B')
s.edge('B', 'C')
s.edge('C', 'D')
s.edge('D', 'E')
s.graph_attr['rankdir'] = 'LR'
with r.subgraph() as t:
t.attr(rank='same')
t.edge('rank3', 'F')
t.edge('F', 'G')
t.graph_attr['rankdir'] = 'LR'
print r
r.view()
如果有帮助,上面的代码会生成点结构:
digraph root {
rank1
rank2
rank3
rank1 -> rank2
rank2 -> rank3
subgraph cluster1 {
color=red
B
D
G
}
subgraph cluster2 {
color=red
A
C
E
F
}
A -> D
A -> B
A -> C
A -> E
B -> F
C -> F
F -> G
{
graph [rankdir=LR]
rank=same
rank2 -> B
B -> C
C -> D
D -> E
}
{
graph [rankdir=LR]
rank=same
rank3 -> F
F -> G
}
}
目前没有回答
相关问题 更多 >
编程相关推荐