微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在NetworkX中将边的两部分列表转换为图形,使每组节点具有重叠的标签?

如何解决如何在NetworkX中将边的两部分列表转换为图形,使每组节点具有重叠的标签?

我目前正在尝试使用NetworkX将我拥有的JSON文件转换为二部图。我的数据如下:

    'edges': [
   {'A': 8,'B': 6},{'A': 21,'B': 4},{'A': 27,{'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,{'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
)

您将获得以下内容:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。