从加权边列表创建有向加权网络图
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']
我有以下存储在 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']