繁体   English   中英

如何在NetworkX中仅绘制前50-100个连接的组件子图; 一次绘制多个子图

[英]How to graph only top 50-100 connected component subgraphs in NetworkX; drawing multiple subgraphs at once

抱歉,这很粗糙:这是我对Stackoverflow的第一篇文章! 抱歉,我没有发布代码,但是我所做的事情并不复杂(也许就是问题所在),所以描述应该可以。 如果由于我是Python的新手而无法描述问题,我也深表歉意。 我不确定如何在没有数据的情况下重新创建示例:(

使用NetworkX时,从熊猫导入数据后,我经常运行具有数千个节点的大型无向图(我们称其为G)。 VAST大多数节点只有一个或两个边缘,这对我来说只是个噪音。 它的群集中有许多令我感兴趣的节点,而实际上这只是少数。

因此,然后我将运行nx.connected_components命令,以列出G包含的所有子nx.connected_components的一长串清单,查看最上面的结果,并一次打印一个我感兴趣的子图。

这样,当我获得所有连接的组件子图的生成器列表/字典(通常很长)时,我通常也只会查看前50-100个结果。 因为这些往往具有我要找的东西。

我尝试了nx.connected_component_subgraphs ,但是有太多我不需要这种方式,几乎就像一次可视化整个网络一样糟糕。

简而言之:我如何才能将nx.connected_components给我的集合的生成器/列表(然后将其缩短到前50个)并将其生成一个新图形?

我尝试将nx.component_components的输出转换为列表,但这是所有集合。

没有错误讯息。

一种方法可能类似于以下内容:

首先找到除N个最大分量以外的所有分量

small_components = sorted(nx.connected_components(G), key=len)[:-N]

然后,从G中删除属于这些分量之一的所有顶点:

G.remove_nodes_from(itertools.chain.from_iterable(small_components))

这是一个示例,其中我们仅保留给定图的两个最大部分:

In [31]: G = nx.Graph()
In [32]: G.add_edges_from([(1, 2), (2, 3), (3, 4), (5, 6), (7, 8), (8, 9)])
In [33]: small_components = sorted(nx.connected_components(G), key=len)[:-2]
In [34]: small_components
Out[34]: [{5, 6}]
In [35]: G.remove_nodes_from(itertools.chain.from_iterable(small_components))
In [36]: G.nodes()
Out[36]: NodeView((1, 2, 3, 4, 7, 8, 9))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM