【问题标题】:Preventing Overlap of edges and nodes with NetwrokX/Matplotlib使用 NetwrokX/Matplotlib 防止边缘和节点重叠
【发布时间】:2018-02-12 08:24:55
【问题描述】:

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

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

【问题讨论】:

  • graphviz_layout 通常做得最好。 (from networkx.drawing.nx_agraph import graphviz_layout.)

标签: python matplotlib plot networkx


【解决方案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()。所以,我卸载了pygraphviz (sudo pip uninstall pygraphviz) 并重新安装如下(感谢this thread 的提示):

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

确实工作了,与使用 NetworkX 的 spring_layout() 相比,使用 graphviz_layout() 的可视化似乎具有更少的节点重叠,以及更美观的边长和簇间距方法。

【讨论】:

  • 谢谢,我搁置了这个项目,因为我想不通,会试一试...
猜你喜欢
  • 2018-03-11
  • 2021-11-09
  • 1970-01-01
  • 2012-10-10
  • 2023-04-02
  • 2016-02-22
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多