python-不带graphviz的NetworkX的固定位置层次输出?

我正在尝试使用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

上一篇:关于Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work的处理建议


下一篇:解决pycallgraph中dot failed cade 1的问题