是否可以更改以下代码以将 Child_4 置于与 Grandchild_0 相同的水平级别(从而将 Grandchild_4 推到自己的级别)?
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_node("ROOT")
for i in xrange(5):
G.add_node("Child_%i" % i)
G.add_node("Grandchild_%i" % i)
G.add_edge("ROOT", "Child_%i" % i)
G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
pos=nx.graphviz_layout(G,prog='dot')
nx.draw(G,pos,arrows=False)
plt.show()
上面的代码产生了以下布局,我想通过将孩子向下移动一级以与孙子水平对齐来改变它:
在 Python 网络库 networkx 中,我使用 graphviz 的点引擎来渲染一棵树(遵循这个建议)。我想通过指定哪些节点应该具有相同的高度来控制节点的 y 位置。节点可能位于树中的不同深度。
rank=same
我知道如果我通过使用命令(例如,{rank=same; n4 -> p2;}
[ ex. ])编写自己的graphviz 代码,我可以控制节点高度。但是,我依赖 networkx.graphviz_layout() [ doc | source ] 生成节点位置,graphviz_layout 只能向 pygraphviz 发送命令行参数。我尝试使用的变体nx.graphviz_layout(G, prog='dot', args="-Grank=same; n4 -> p2;")
失败了。 是否可以在 pygraphviz 的 NetworkX 包装器中描述所需的节点高度,还是我需要围绕 pygraphviz 编写自己的包装器? 编辑:答案为 pygraphviz 提供了一个新的包装器。它将显着简化在 pygraphviz 的现有 NetworkX 包装器中发送排名信息的事情。如果有人能告诉我这怎么可能,我会改变我接受的答案。