因为密钥不是唯一的(您有两次作为密钥),所以不能将数据存储在类似{'A': {'B': '29'}, 'C': {'D': '26'}, 'C': {'B': '12'}}
的字典中。我建议使用2D列表来代替,例如, 'A': {'B': '29'}
将变为['A', 'B', '29']
。
我假设你的图是无向的(边A-> B与B-> A相同),并且两个节点之间没有更多的边。
这里是我的例子,只有3个边,我绘制节点(和他们的名字)和边缘(和他们的权重)。我还将你的权重转换为数值,因为你声明你将在你的图上进行计算。
import networkx as nx
import matplotlib.pyplot as plt
data = [
['A', 'B', '29'],
['C', 'D', '26'],
['C', 'B', '12']
]
G = nx.Graph() # new empty undirected graph
for row in data:
src_node = row[0]
dest_node = row[1]
weight = float(row[2]) # convert weight to a number
G.add_edge(src_node, dest_node, weight=weight)
pos = nx.spring_layout(G) # compute graph layout
nx.draw(G, pos, node_size=700) # draw nodes and edges
nx.draw_networkx_labels(G, pos) # draw node labels/names
# draw edge weights
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
# show image
plt.show(G)
输出:
注意,这可能需要一段时间Python来绘制图形,如果你有很多节点和边缘(图像也可能是杂乱)的。值得一提的是,使用spring_layout
布局功能,您可以在每次运行代码时获得不同的图像。
来源
2016-12-03 21:29:59
edo
你可以缩小这个单一的问题,并解释你所尝试的? – Joel
你是如何尝试创建图表的,出了什么问题?请提供[mcve]。 –
这是我的用于通过CSV文件读取,使多级词典 my_dict = {} 张开( 'final_graph.csv')作为f_input代码:在csv.reader 为行(f_input): my_dict [行[0]] = {row [1]:row [2]} 我想将my_dict转换为具有所有节点和边的可见网络图 –