![](/img/trans.png)
[英]inheriting networkx Graph and using nx.connected_component_subgraphs
[英]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.