我正在尝试使用 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 描述了各种绘图命令

关于python - 没有graphviz的NetworkX固定位置分层输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26343250/

10-12 20:25