簡體   English   中英

如何將邊的二部列表轉換為 NetworkX 中的圖,每組節點都具有重疊標簽?

[英]How to convert a bipartite list of edges into a graph in NetworkX with each set of nodes having overlapping labels?

我目前正在嘗試使用 NetworkX 將我擁有的 JSON 文件轉換為二部圖。 我的數據如下所示:

    'edges': [
   {'A': 8, 'B': 6},
   {'A': 21, 'B': 4},
   {'A': 27, 'B': 6},
   {'A': 4, 'B': 5},
   ...
   ]

基本上,我有兩組節點:A 和 B。邊列表描述了集合 A 的節點如何與集合 B 的節點連接。

我的問題是節點具有重疊的標識符。 換句話說,我在集合 A 中有節點 0、1、2 等,在 B 中有 0、1、2 等(節點數不一定相同,但它們的值重疊)。 當我嘗試將所有節點添加到我的圖中時,我沒有得到所有節點,因為有些節點是重復的。

我如何處理在我的兩個集合中有重復節點? 它們實際上是不同的節點,但 NetworkX 並沒有這樣對待它們。 我看到您可以為節點設置“值”,但我不確定如何將所有內容組合在一起。

最后,我想有一種方法來生成節點,以便我可以通過以下方式將邊添加到我的圖中:

import networkx as nx

G = nx.Graph()
# Add nodes here

# Add edges
G.add_edges_from(
    (edge['B'], edge['A'])
    for edge in graph['edges']
)

您可以將節點添加到圖形中,其 ID 不等於您的字典中的值,但等於 AB 類型加值:

import networkx as nx

# Create edges dict and graph
edges = [
   {'A': 8, 'B': 6},
   {'A': 21, 'B': 4},
   {'A': 27, 'B': 6},
   {'A': 4, 'B': 5},
]
G = nx.Graph()

for edge in edges:

    # Create A-id
    a_id = 'A' + str(edge['A'])

    # Add node with A-id to graph
    G.add_node(a_id)

    # Add value to node data
    G.nodes[a_id]['value'] = edge['A']

    # Create B-id
    b_id = 'B' + str(edge['B'])

    # Add node with B-id to graph
    G.add_node(b_id)

    # Add value to node data
    G.nodes[b_id]['value'] = edge['B']

    # Add A-id - B-id edge to graph
    G.add_edge(a_id, b_id)

如果你要繪制圖形:

nx.draw(
    G,
    node_color='#FF0000',
    with_labels=True
)

你會得到這樣的東西:

在此處輸入圖片說明

暫無
暫無

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

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