python - 没有 graphviz 的 NetworkX 的固定位置分层输出?

标签 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 解决方案来看,它看起来只需要计算节点的位置。这样说对吗,只要我为绘制命令指定一个坐标列表,我就能在正确的位置绘制节点?

谢谢

最佳答案

更新(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

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

相关文章:

python - 我如何打开不同的 linux 终端以在 python 中输出不同种类的调试信息?

python - 自动计数器作为整数的子类?

grammar - 在 Linux 上使用 Bison --graph=[file] 的技巧

python - 为什么我得到相同的图表?

python - 与networkx的暴力图同构

python - 在 Python 中计算整数列表中唯一乘法和加法对数量的有效方法是什么?

python - TensorFlow:了解 tf.summary.scalar 中的 `collections` 参数

windows - keras plot_model 告诉我安装 pydot

GraphViz 强制列

Python 网络 x : grouping nodes based on a node attribute