不使用graphviz,如何从NetworkX中获得固定位置的分层输出?

3

我正在尝试使用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的解决方案,似乎只需要计算节点的位置。我可以说,只要我指定了绘图命令的一系列坐标,我就能在正确的位置绘制节点,对吗?

谢谢。


请查看我的答案这里。我认为它可以实现你真正想要的功能。 - Joel
1个回答

3
更新(2015年4月15日)查看我的答案这里,其中包含我认为能够实现你想要的功能的代码。

如果你没有Graphviz,networkx不会让你轻易使用Graphviz布局,因为如果你尝试复制Graphviz的布局,最好使用Graphviz的算法。

但是,如果你愿意付出计算每个节点位置的努力,这很简单(正如你所猜测的那样)。创建一个指明每个节点位置的字典即可。

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

nx.draw(G,pos)

在这里,将执行您想要的坐标xcoord和ycoord。

各种绘图命令的描述在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接