固定位置分层输出来自NetworkX而没有graphviz?

时间:2014-10-13 15:12:34

标签: 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解决方案看,它似乎只需要计算节点的位置。说这是正确的,只要我指定绘图命令的坐标列表,我就可以在正确的位置绘制节点吗?

由于

1 个答案:

答案 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