从加权边列表创建有向加权网络图

Creating a directed, weighted network graph from weighted edgelist

我有以下存储在 edgelist.txt 中的边缘列表:

soldier1, soldier2, 3
soldier1, soldier3, 1
soldier1, soldier4, 2
soldier2, soldier1, 2
soldier2, soldier3, 1
soldier2, soldier4, 3
soldier3, soldier1, 3
soldier3, soldier2, 2
soldier3, soldier4, 1
soldier4, soldier1, 2
soldier4, soldier2, 1
soldier4, soldier3, 3

为了绘制图形,我使用了以下代码:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.read_weighted_edgelist(path='edgelist.txt', delimiter=',', create_using=nx.DiGraph())
nx.draw_networkx(G, with_labels=True, arrowsize=5, pos=nx.spring_layout(G))
limits=plt.axis('off')
plt.show()

但是,它正在创建一个节点数量翻倍的图表(应该只有 4 个,但它创建的图表有 8 个。)当您查看图表的绘图时,这一点很明显:

这是图表信息:

Name: 
Type: DiGraph
Number of nodes: 8
Number of edges: 12
Average in degree:   1.5000
Average out degree:   1.5000

边数正确,但节点数加倍。我该如何解决这个问题?

由于您将 , 指定为分隔符,因此空白字符被视为名称的一部分。
因此,您最终会得到每个节点的两个节点 ' soldierN''soldierN'

您可以更改分隔符以同时考虑空格,即从 ','', '

>>> G = nx.read_weighted_edgelist(path='edgelist.txt', delimiter=', ', create_using=nx.DiGraph())
>>> G.nodes()
['soldier1', 'soldier2', 'soldier3', 'soldier4']