我正在尝试绘制带有加权边的网络图,但是现在我遇到了一些困难。
正如标题所示,这张图非常庞大:
节点数: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算法触发的。知道是什么导致了这个吗?即使我使用不同的pos算法我也会得到相同的错误,我怎么能避免它(如果可以的话)?
另一方面,我想根据重量为边缘着色。你可以看到有很多边缘,可能还有很多权重,最好的方法是什么?
感谢您的耐心等待。
编辑来自我的评论:
我正在尝试调查我的数据密度。基本上我正在看50,000个比赛,每个比赛包含10个玩家,每当两个玩家在一个游戏中相遇时,我会对它们之间的边缘重量+1。我的想法是,我的最终结果将向我展示我的数据集的强度。在我看来,我希望中心最重的边缘,当我们从中心移出时,数据的连接密度较小。
答案 0 :(得分:2)
问题在于spring_layout方法。有了这么多节点,需要一段时间才能计算出所有节点相对于彼此的位置。有了这么多节点,我建议你自己搞清楚x,y位置或者绘制更小的子图。 (< 5000节点或你的计算机可能有点迟钝了。
这是来自erdos_renyi_graph(随机选择的边)的1000个节点的样子。
它拉出2个节点以突出显示。
接下来是1500的样子 它有一点细节。现在有7-8个有趣的节点。
在图表上有如此多的边缘和如此多的节点,没有多少东西可以获得。如果您不喜欢输出会发生什么,您需要重新运行它。
要获得每个节点的x,y位置,请查看此内容。 in NetworkX show graph with nodes at exact (x,y) position. Result is rotated