绘制大型networkx图:数组太大
我正在尝试用networkx画一个带有权重边的图,但现在遇到了一些困难。
正如标题所说,这个图真的很大:
节点数量: 103362
边的数量: 1419671
当我用以下代码尝试绘制这个图时:
pos = nx.spring_layout(G)
nx.draw(G, node_color='#A0CBE2',edge_color='#BB0000',width=2,edge_cmap=plt.cm.Blues,with_labels=False)
plt.savefig("edge_colormap.png") # save as png
plt.show() # display
(这只是我在测试功能,并不是我想要的最终结果)。我遇到了一个错误:
ValueError: 数组太大了。
这个错误是由spring_layout算法引发的。你知道是什么原因吗?即使我使用不同的布局算法,还是会出现同样的错误,我该如何避免这个问题(如果可以的话)?
另外,我想根据边的权重来给它们上色。正如你所看到的,边的数量很多,权重范围也可能很广,最好的做法是什么呢?
谢谢你的耐心。
我在评论中补充:
我正在尝试调查我数据的密度。基本上,我在查看50,000场比赛,每场比赛有10名玩家,每当两名玩家在比赛中相遇时,我就把它们之间的边的权重加1。我的想法是,最终结果能显示出我的数据集的强度。在我心中,我希望最重的边在中心,随着我们从中心向外移动,数据的连接就会变得稀疏。
1 个回答
3
问题出在使用spring_layout这个方法上。因为节点太多了,计算它们之间的位置会花费一些时间。如果节点数量这么多,我建议你要么自己计算每个节点的x和y坐标,要么把图分成更小的子图来画。(最好少于5000个节点,不然你的电脑可能会变得有点慢。)
这是一个包含1000个节点的erdos_renyi_graph(随机选择的边)效果图。
图中突出了两个节点。
接下来是1500个节点的效果图: 这次细节多了一些,现在有7到8个有趣的节点。
在图中有这么多边和节点,其实收获不大。如果你对结果不满意,还得重新运行一遍。
如果你想获取每个节点的x和y坐标,可以看看这个链接:在NetworkX中显示节点在确切的(x,y)位置,结果是旋转的