Python 不带graphviz的NetworkX的固定位置分层输出?

Python 不带graphviz的NetworkX的固定位置分层输出?,python,graphviz,networkx,Python,Graphviz,Networkx,我正在尝试使用Python绘制简单的层次结构树。我正在使用networkx模块。我声明了一个简单的图 G=networkx.DiGraph() 在将节点和边添加到G中之后,我尝试使用 nx.draw(G) 或 策划。输出打印层次结构都是正确的,但节点的位置在图形上显示为完全随机的。更糟糕的是,每次我运行脚本时,节点位置都不同 在一个类似的问题中提供了一个解决方案,需要graphviz包 pos=nx.graphviz_layout(G,prog='dot') nx.draw(G,pos,

我正在尝试使用Python绘制简单的层次结构树。我正在使用networkx模块。我声明了一个简单的图

G=networkx.DiGraph() 
在将节点和边添加到G中之后,我尝试使用

nx.draw(G) 

策划。输出打印层次结构都是正确的,但节点的位置在图形上显示为完全随机的。更糟糕的是,每次我运行脚本时,节点位置都不同

在一个类似的问题中提供了一个解决方案,需要graphviz包

pos=nx.graphviz_layout(G,prog='dot')
nx.draw(G,pos,with_labels=False,arrows=False)
不幸的是,我不允许安装graphviz。所以我在这里寻找替代方案。 从graphviz解决方案来看,似乎只需要计算节点的位置。只要我为draw命令指定一个坐标列表,就可以在正确的位置绘制节点,这样说对吗

感谢更新(2015年4月15日)查看我的答案,我认为这些代码将满足您的需求


因此,如果您没有graphviz,networkx不会使使用graphviz布局变得特别容易,因为如果您试图再现graphviz的布局,使用graphviz的算法是一个更好的主意

但是,如果您愿意计算每个节点的位置,这是很简单的(正如您所猜测的)。创建一个dict,说明每个节点的位置应该在哪里

pos = {}
for node in G.nodes():
    pos[node] = (xcoord,ycoord)

nx.draw(G,pos)
将在xcoord和ycoord是您想要的坐标的位置执行此操作


描述了各种绘图命令

请查看我的答案。我想这是你真正想要的。
pos = {}
for node in G.nodes():
    pos[node] = (xcoord,ycoord)

nx.draw(G,pos)