簡體   English   中英

忽略 NetworkX Graph 中的非連接節點

[英]Ignore non-connected nodes in NetworkX Graph

我有一個網絡圖,其中一個節點連接到另一個節點,另一個節點又連接到另一個節點,通過一種邏輯來忽略只有一個鄰居但仍然留下一些位的情況。 附圖更好地解釋了它

圖片

我只需要保留紅色節點通過綠色節點連接到藍色節點或另一個紅色節點的位置。 使用的數據

for u, v in CA_new.edges:
    
    if len(list(CA_new.neighbors(v))) == 1 and len(list(CA_new.neighbors(u))) == 1:
        removeNodeslist.append(v)
        removeNodeslist.append(u)
    else:
        keepNodeslist.append(v)
        keepNodeslist.append(u)
CA_new.remove_nodes_from(removeNodeslist)

從您的評論來看,您似乎在尋找包含至少兩個父節點的連通組件,並且這些父節點中至少有一個具有彩色邊。 考慮到這一點,您可以執行以下操作:

import numpy as np
import networkx as nx
import pandas as pd

data = {
    'Parent': list("EEABEHDILGKCDBLLFBCCJ"),
    'Child':  ["X1","X2","Y1","Y1","Y1","M1","N3","N4","N5","N7","N8","M1","M2",
               "M3","M4","M5","M6","M7","M8","M9","P7"],
    'Colour': list("NNNNYYNYNNNYNNNNYNNNN")
}
df = pd.DataFrame(data)

G = nx.from_pandas_edgelist(df, source = 'Parent', target = 'Child')
parent_set = set(df['Parent'])
colored_parent_set = set(df.loc[df['Colour']=='Y','Parent'])

node_set = set()
for comp in nx.connected_components(G):
    if (len(comp & parent_set) >= 2 and
        comp & colored_parent_set):
        node_set |= comp

H = G.subgraph(node_set)

colors = ['limegreen']*len(H)
for i,n in enumerate(H.nodes):
    if n in colored_parent_set:
        colors[i] = "red"
    elif n in parent_set:
        colors[i] = "deepskyblue"

nx.draw(H, node_color = colors, with_labels = True)

這是我得到的結果:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM