【发布时间】:2019-07-21 19:40:27
【问题描述】:
我没有看到在 pygraphviz 中添加相同排名的示例。现在我正在使用G.string() 字符串并在末尾附加{rank = same; node1 node2}。有没有更好的方法来做到这一点?
【问题讨论】:
标签: graphviz rank pygraphviz
我没有看到在 pygraphviz 中添加相同排名的示例。现在我正在使用G.string() 字符串并在末尾附加{rank = same; node1 node2}。有没有更好的方法来做到这一点?
【问题讨论】:
标签: graphviz rank pygraphviz
在我的代码中,add_nodes_from() 添加了没有边缘的节点,在同一水平级别:
A.add_nodes_from(["coyote", "wolf"])
add_edge()在垂直列中添加了带边的节点:
A.add_edge(1,2)
设置参数constraint=False将节点放在同一水平面上:
A.add_edge(previous_item, item, rank='same', constraint=False)
我写了一个函数:
def add_nodes_connected_by_edges(graph, items, rank_same):
"""
Adds nodes to graph, one node per string in items
:param graph: a pygraphviz graph
:param items: a list of strings
:param rank_same: boolean. True ranks nodes so they appear at same horizontal level
"""
previous_item = None
for item in items:
graph.add_node(item)
if previous_item is not None:
# Use constraint=False to keep rank same
# https://stackoverflow.com/questions/22756929/graphviz-make-edges-not-affecting-the-hierarchy-of-nodes
graph.add_edge(previous_item, item, rank='same', constraint=(not rank_same))
previous_item = item
graphvizzy仓库展示了一个更完整的例子
【讨论】: