[英]Not Able To Plot Graph Using Networkx in Python
我有以下格式的CSV文件,
A,B,23
C,D,21
D,B,12
每個節點代表一個站點,權重代表它們之間的運行時間。 我需要使用networkx構建一個圖,其中節點為站點,運行時間為邊緣。 我創建了一個多級字典,格式如下
{'A': {'B': '29'}, 'C': {'D': '26'},'C': {'B': '12'}
我無法使用Networkx創建圖形並繪制它。
創建圖后,我還將應用Dijstra算法查找最短路徑
我的CSV文件中總共有1500行,我正從中將其轉換成字典。 還有其他有效的方法嗎?
您不能在{'A': {'B': '29'}, 'C': {'D': '26'}, 'C': {'B': '12'}}
因為鍵不是唯一的(您將C
兩次用作鍵)。 我建議改用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
布局函數,您每次運行代碼都可以獲得不同的圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.