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

Python 如何在NetworkX中仅绘制前50-100个连通组件子图;一次绘制多个子图,python,networkx,Python,Networkx,对不起,如果这是粗糙的:这是我的第一篇文章Stackoverflow!我事先很抱歉没有发布代码,但我所做的一切都不复杂(也许这就是问题所在),所以描述应该是可行的。如果我不擅长描述问题,我也很抱歉,因为我是Python新手;我不确定如何在没有数据的情况下重新创建示例:( 在使用NetworkX时,在从pandas导入数据后,我经常使用数千个节点运行大型无向图(我们称之为G)。绝大多数节点只有一条或两条边,这对我来说只是噪音。我感兴趣的是包含大量节点的群集,而这实际上是少数 因此,我将运行nx.c

对不起,如果这是粗糙的:这是我的第一篇文章Stackoverflow!我事先很抱歉没有发布代码,但我所做的一切都不复杂(也许这就是问题所在),所以描述应该是可行的。如果我不擅长描述问题,我也很抱歉,因为我是Python新手;我不确定如何在没有数据的情况下重新创建示例:(

在使用NetworkX时,在从pandas导入数据后,我经常使用数千个节点运行大型无向图(我们称之为G)。绝大多数节点只有一条或两条边,这对我来说只是噪音。我感兴趣的是包含大量节点的群集,而这实际上是少数

因此,我将运行
nx.connected\u components
命令,列出包含G的所有子图集,查看顶部结果,并一次打印我感兴趣的各个子图

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

我尝试了
nx.connected\u component\u子图
,但是,有太多我不需要的子图,以至于它几乎和一次可视化整个网络一样糟糕

简言之,我如何将
nx.connected\u components
提供给我的生成器/集合列表(我将其缩短到前50个)放入一个新的图表中

我试着将
nx.component\u components
的输出转换成一个列表,但都设置好了


没有错误消息。

一种方法可以是如下所示:

首先查找除N个最大组件以外的所有组件

small_components = sorted(nx.connected_components(G), key=len)[:-N]
然后,从G中删除属于以下组件之一的所有顶点:

G.remove_nodes_from(itertools.chain.from_iterable(small_components))
下面是一个示例,其中我们只保留给定图形的两个最大分量:

[31]中的
G=nx.Graph()
在[32]中:G.添加来自([(1,2)、(2,3)、(3,4)、(5,6)、(7,8)、(8,9)]的边
在[33]中:小组件=已排序(nx.连接的组件(G),key=len)[:-2]
In[34]:小型组件
Out[34]:[{5,6}]
在[35]中:G.从(itertools.chain.from_iterable(小组件))中移除节点
在[36]:G.nodes()中
Out[36]:NodeView((1,2,3,4,7,8,9))

欢迎来到StackOverflow。我认为@Andreas的评论不太合理,但我认为这是一个简单的工作示例(MWE)在这里,使用一些虚假数据会有所帮助。证明问题只是MWE的一个原因。更重要的是,它显示了你自己对问题的假设,并迫使你指定解决方案的形状。例如,在你的案例中,标题说你正在与绘图问题作斗争,而文本(对我)表明您只想将组件融合到一个网络中。很少有人会尝试解决指定错误的问题。感谢你们的投入;承认这一点很尴尬,但我在制作自己的MWE时遇到了困难,并且我知道您所说的一切@Andreas。由于下面的pro,我得到了需要的解决方案,现在我也学到了如何使我自己的例子向前发展。很抱歉在我这么新的时候发布,但是,我自己尝试了很多事情,我只是不知道从哪里开始,并尽我所能描述问题。非常感谢!这非常有效,即使有大量的子图。你是我的英雄。同时,感谢你告诉我如何轻松创建伪造无向图。我很难简单地为其他人制作一个MWE(我的道歉@Andreas)。还有,有人能向我推荐任何好的资源来了解更多吗?我参加了DataCamp的NetworkX课程,但是,我觉得还有很多要知道的。非现场资源推荐在这里是离题的