簡體   English   中英

無法在Python中使用Networkx繪制圖形

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM