我正在尝试使用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解决方案看,它似乎只需要计算节点的位置。说这是正确的,只要我指定绘图命令的坐标列表,我就可以在正确的位置绘制节点吗?
由于
答案 0 :(得分:3)
更新(2015年4月15日)请查看我的回答here,了解我认为会执行您所做的事情的代码。
因此,如果你没有graphviz,networkx并没有特别容易地使用graphviz布局,因为如果你想要使用graphviz算法,那么它是更好的主意。试图重现graphviz的布局。
但是,如果您愿意为每个节点计算位置,这很简单(正如您所猜测的那样)。创建一个dict,说明每个节点的位置。
pos = {}
for node in G.nodes():
pos[node] = (xcoord,ycoord)
nx.draw(G,pos)
将在xcoord和ycoord是您想要的坐标的地方进行。
描述了各种绘图命令here