我是python的新手,仍然每天学习和研究新事物。我有一个具有以下结构的文本文件
unittests.py
我想创建一个嵌套字典,该字典将以年度有向网络图的形式捕获此信息。 fileIn [0]年,fileIn [1]是源节点,fileIn [2]目标节点,fileIn [3]是权重。 defaultdict将用于捕获网络的其他属性。 目前,我正在运行以下代码,这给了我一个空图。另外,当我运行短代码时,出现错误networkx没有属性Digraph。 任何帮助将不胜感激。预先感谢
2011 1 2 4043.428261
2011 1 3 1129.99031
. . . .
. . . .
2012 1 4 2610.262872
2012 1 5 1526.420342
. . . .
. . . .
2013 1 6 497.5094923
2013 1 7 6666.273778
. . . .
. . . .
2014 1 8 502.258575
2014 1 9 1134.696447
答案 0 :(得分:0)
我相信这应该可以满足您的要求:
import networkx as nx
import networkx.drawing
from collections import defaultdict
import matplotlib.pyplot as plt
G = nx.Graph()
graphs = {}
year_id = ('2011', '2012', '2013', '2014')
fileIn = open("Data3.txt", 'r').readlines()
for line in fileIn:
line = line.strip('\n')
year, u, v, amount = [n for n in ' '.join(line.split("\t")).split(' ') if n]
this_year_id = year = year_id.index(year)
if this_year_id not in graphs.keys():
graphs[this_year_id] = nx.DiGraph(G)
graphs[this_year_id].add_weighted_edges_from([(u, v, amount)])
for i, graph in graphs.items():
ax = plt.subplot(221 + i)
ax.set_title(str(2011+i))
nx.draw(graphs[0], with_labels=True, font_weight='bold')
plt.show()
正如@sim所指出的,您想要的是DiGraph
,而不是Digraph
,这是导致您出错的原因。
原始代码的另一个问题是在循环中将year_id
元组分配给year
,因此G
拥有的唯一密钥是('2011', '2012', '2013', '2014')
。边缘也从未真正放在图上。