python: graphviz 中的 rank 属性以对齐节点
python: rank attribute in graphviz to align nodes
我正在尝试使用 'rank' 属性让我的节点在 graphviz 中对齐,但我没有得到想要的结果。我在 jupyter 笔记本中使用 graphviz。这是我的代码:
import graphviz
from IPython.display import display
p = graphviz.Digraph(graph_attr={'rankdir':'LR'}, format='png')
p.node('A')
p.node('B')
p.node('D')
p.node('E')
p.node('F')
p.edges(['AB','BD', 'DE', 'EF'])
c = graphviz.Digraph(name='child',
graph_attr={'rankdir':'LR', 'rank':'min'},
node_attr={'shape': 'box'})
c.node('C')
c.edges(['AC', 'CD'])
p.subgraph(c)
p.render('p.gv', view=False)
with open("p.gv") as f:
dot_graph = f.read()
display(graphviz.Source(dot_graph))
所以我想要实现的是让节点 'A'、'B'、'D'、'E' 和 'F' 都在同一行从左到右对齐,然后节点 'C' 直接位于节点 'B' 上方。我嵌入了一个图像,它显示了我的代码当前状态的输出。根据图像,我想以节点 'D' 为旋转轴,将节点 'A'、'B' 和 'C' 逆时针旋转 90 度。然后,一旦完成,我想切换节点 'B' 和 'C'
的位置
希望有人能帮帮我。
谢谢
无法提供 Python 版本,但这里是普通的 Graphviz。诀窍是 rank=same
digraph D {
// rankdir=LR // nope
C[shape=rect]
{rank=same // this puts all 5 nodes on same rank
A->B
B->D
D->E
E->F
}
A->C->D
}
给予:
感谢@sroush,我能够基于@sroush 提供的 Graphviz 代码构建 Python 代码。
import graphviz
from IPython.display import display
p = graphviz.Digraph(format='png')
p.node('C', shape='box')
c = graphviz.Digraph(graph_attr={'rank':'same'})
c.node('A')
c.node('B')
c.node('D')
c.node('E')
c.node('F')
c.edges(['AB','BD', 'DE', 'EF'])
p.edges(['AC', 'CD'])
p.subgraph(c)
p.render('j.gv', view=False)
with open("j.gv") as f:
dot_graph = f.read()
display(graphviz.Source(dot_graph))
我正在尝试使用 'rank' 属性让我的节点在 graphviz 中对齐,但我没有得到想要的结果。我在 jupyter 笔记本中使用 graphviz。这是我的代码:
import graphviz
from IPython.display import display
p = graphviz.Digraph(graph_attr={'rankdir':'LR'}, format='png')
p.node('A')
p.node('B')
p.node('D')
p.node('E')
p.node('F')
p.edges(['AB','BD', 'DE', 'EF'])
c = graphviz.Digraph(name='child',
graph_attr={'rankdir':'LR', 'rank':'min'},
node_attr={'shape': 'box'})
c.node('C')
c.edges(['AC', 'CD'])
p.subgraph(c)
p.render('p.gv', view=False)
with open("p.gv") as f:
dot_graph = f.read()
display(graphviz.Source(dot_graph))
所以我想要实现的是让节点 'A'、'B'、'D'、'E' 和 'F' 都在同一行从左到右对齐,然后节点 'C' 直接位于节点 'B' 上方。我嵌入了一个图像,它显示了我的代码当前状态的输出。根据图像,我想以节点 'D' 为旋转轴,将节点 'A'、'B' 和 'C' 逆时针旋转 90 度。然后,一旦完成,我想切换节点 'B' 和 'C'
的位置希望有人能帮帮我。
谢谢
无法提供 Python 版本,但这里是普通的 Graphviz。诀窍是 rank=same
digraph D {
// rankdir=LR // nope
C[shape=rect]
{rank=same // this puts all 5 nodes on same rank
A->B
B->D
D->E
E->F
}
A->C->D
}
给予:
感谢@sroush,我能够基于@sroush 提供的 Graphviz 代码构建 Python 代码。
import graphviz
from IPython.display import display
p = graphviz.Digraph(format='png')
p.node('C', shape='box')
c = graphviz.Digraph(graph_attr={'rank':'same'})
c.node('A')
c.node('B')
c.node('D')
c.node('E')
c.node('F')
c.edges(['AB','BD', 'DE', 'EF'])
p.edges(['AC', 'CD'])
p.subgraph(c)
p.render('j.gv', view=False)
with open("j.gv") as f:
dot_graph = f.read()
display(graphviz.Source(dot_graph))