2017-09-04 191 views
1

我想绘制一个问题“Collat​​z猜想”的数字,它在数字(节点标签)之间形成一个很好的网络。然而,使用networkx nx.spring_layout(G)该溶液的最终情节在我得到重叠边缘和节点: enter image description here enter image description here防止用NetwrokX/Matplotlib重叠边缘和节点

的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)之外的其他布局,这可能会更好地处理此问题。

+0

'graphviz_layout'通常会做最好的工作。 ('from networkx.drawing.nx_agraph import graphviz_layout'。) – DyZ

回答

0

接受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(),以及在边缘长度和群集间距方面更令人满意的方法。