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