簡體   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