我不确定我是否理解您文件的格式,因为前两列似乎告诉您应该由一条边连接的节点,而第三列是该边的权重。
假设是这种情况,将边缘的 CSV 文件加载到 NetworkX 的更简单方法是使用 networkx.read_edgelist 函数。这是您的图表的示例(假设它存储在名为 "edges.txt" 的文件中):
In [1]: import networkx as nx
In [2]: G = nx.read_edgelist("edges.txt", delimiter=",", data=[("weight", int)])
In [3]: G.edges(data=True)
Out[1]:
[(u'A', u'C', {'weight': 34}),
(u'A', u'B', {'weight': 50}),
(u'A', u'D', {'weight': 90}),
(u'C', u'D', {'weight': 55}),
(u'B', u'D', {'weight': 78}),
(u'D', u'D', {'weight': 80})]
需要注意的重要参数是需要将每一行的分隔符设置为逗号(","),并且需要指定存储在第三列中的数据是整数,应该使用键"weight"。
然后您可以使用权重作为边缘标签来绘制图形,如下所示:
In [4]: edge_labels = dict( ((u, v), d["weight"]) for u, v, d in G.edges(data=True) )
In [5]: pos = nx.random_layout(G)
In [6]: nx.draw(G, pos)
In [7]: nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
In [8]: import matplotlib.pyplot as plt; plt.show()