如何将边的二分列表转换为 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-type 加上值:
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
)
你会得到这样的东西:
我目前正在尝试使用 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-type 加上值:
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
)
你会得到这样的东西: