我正在尝试使用 Python 来绘制简单的分层树。我正在使用 networkx 模块。我声明了一个简单的图形
G=networkx.DiGraph()
将节点和边添加到 G 后,我尝试使用
nx.draw(G)
或者
nx.draw_networkx(G)
情节。输出图层次结构都是正确的,但节点的位置在图形上都是随机出现的。更糟糕的是,每次运行脚本时,节点位置都不同。
在需要 graphviz 包的类似问题中提供了一个解决方案。
pos=nx.graphviz_layout(G,prog='dot')
nx.draw(G,pos,with_labels=False,arrows=False)
不幸的是,我不允许安装graphviz。所以我在这里寻求替代解决方案。
从graphviz解决方案来看,它看起来只需要计算节点的位置。这么说是否正确,只要我为 draw 命令指定坐标列表,我就可以在正确的位置绘制节点?
谢谢
最佳答案
更新 (2015 年 4 月 15 日)查看我的答案 here 以获取我认为可以满足您需求的代码。
因此,如果您没有 graphviz,networkx 不会让使用 graphviz 布局变得特别容易,因为如果您尝试重现 graphviz 的布局,最好使用 graphviz 的算法。
但是,如果您愿意努力计算每个节点的位置,这很简单(如您所料)。创建一个字典,说明每个节点的位置应该在哪里。
pos = {}
for node in G.nodes():
pos[node] = (xcoord,ycoord)
nx.draw(G,pos)
将在 xcoord 和 ycoord 是您想要的坐标的地方进行。
here 描述了各种绘图命令
关于python - 没有graphviz的NetworkX固定位置分层输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26343250/