在Networkx中绘制大图时出错

时间:2018-05-30 15:17:29

标签: python graph data-visualization networkx

我试图想象一个总共有300,000个节点的二分图。我在下面使用我的帮助函数。

def plot_network(G):
   pos = nx.spring_layout(G) 
   plt.figure(figsize=(10,10)) 
   nx.draw_networkx(G, pos, iterations=20, node_grouping='bipartite', 
   with_labels=False, node_size = 5)

plot_network(G)

当我尝试将图形完整地可视化时,IPython单元格中会弹出以下错误,并且该过程将永久挂起:

C:\Users\user\AppData\Roaming\Python\Python36\site-packages\networkx\drawing\layout.py:499: RuntimeWarning:

invalid value encountered in sqrt

我尝试通过对我的数据进行随机抽样来可视化较小的图形并且它已经工作......直到样本超过9000个节点。

我不确定如何解释我得到的错误,但似乎图形尺寸是一个因素。那么,我可以在Networkx中看到的图形大小是否存在限制?无论如何我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

似乎Networkx无法为所有节点分配足够的空间,请先尝试增加figsize或缩小node_size。如果这些都不起作用,请尝试使用pip install networkx --upgrade升级networkx包,因为您似乎没有使用最新版本的networkx。

答案 1 :(得分:0)

除了Bubble Bubble的答案建议外,请尝试使用更简单的布局算法。最初,我是使用spring_layout遇到此错误的,但是我发现圆形的作品。

fig, axs = plt.subplots(1,1, figsize=(25,25))

# Define node positions using layout algo
# pos = nx.spring_layout(G, center=(1,1), k=40, iterations=5) # returns error
pos = nx.circular_layout(G)

# draw
nx.draw(G,axis=axs, pos=pos, node_size=1)