因爲密鑰不是唯一的(您有兩次作爲密鑰),所以不能將數據存儲在類似{'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轉換爲具有所有節點和邊的可見網絡圖 –