使用NetwrokX / Matplotlib防止边缘和节点重叠

时间:2017-09-04 06:18:12

标签: python matplotlib plot networkx

我试图绘制一个问题“Collat​​z Conjecture”的数字,它在数字(节点标签)之间形成了一个很好的网络。但是,在使用networkx nx.spring_layout(G)的解决方案的最终图中,我得到重叠的边和节点: enter image description here enter image description here

nx.spring_layout配置为(通过试验和错误):

 pos=nx.spring_layout(G,k = 0.004, iterations = 500, scale = 0.6)
 nx.draw(G, labels=labels, pos=pos, font_size = 6, alpha = 0.5, node_size = nodes.values())
 plt.show()

考虑到绘图窗口中有足够的空白空间,是否有一种特殊方法可以防止这种重叠?在这种情况下,节点大小由以下值决定:len(G.neighbors(node)) 没有节点具有多于3个邻居并且最大节点大小被限制在300以进一步防止重叠。 奇怪的是,对于较长的分支,这似乎处理得相当好,但是对于像[24,12,6,3,10]这样的分支,如图像中那样,它无法充分划分这个分支,在其他情况下它完全重叠。请告知我是否应该使用nx.spring_layout(G)之外的其他布局,以便更好地处理此问题。

1 个答案:

答案 0 :(得分:1)

接受DYZ关于使用graphviz_layout()的真正有用的评论,我想我会在这里分享我的经验,以防其他人遇到类似的问题,因为这个设置并非完全直截了当(对我来说,至少在Ubuntu 16.04上):

我发现sudo pip install pygraphviz无法正常工作,因为它无法找到所需的文件之一。然后我尝试sudo apt-get install graphviz libgraphviz-dev pkg-config,然后sudo pip install pygraphviz(感谢this suggestion),其中看起来就像它工作(即安装成功),但我仍然无法使用通过NetworkX graphviz_layout()。所以,我卸载pygraphvizsudo pip uninstall pygraphviz)并按如下方式再次安装(感谢this thread提示):

sudo pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"

这个做了工作,与graphviz_layout()的可视化似乎比使用NetworkX的spring_layout()具有更少的节点重叠,以及更加令人愉悦的边长和簇间距。