python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径
生活随笔
收集整理的這篇文章主要介紹了
python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、圖的創建
# 圖的創建
# 圖的方法
# networkx
二、networkx繪制帶權無向圖
三、networkx繪制帶權有向圖
四、networkx標注特定路徑
一、圖的創建
Networkx很容易創建圖、向圖中添加頂點和邊、從圖中刪除頂點和邊,也可以查看、刪除頂點和邊的屬性。
# 圖的創建
類型:Graph()類、DiGraph()類、MultiGraph()類和MultiDiGraph() 類分別用來創建 無向圖、有向圖、多圖和有向多圖。
創建一個沒有節點和邊的空圖。
import networkx as nx import networkx as nx # 導入 NetworkX 工具包 # 創建 圖 G1 = nx.Graph() # 創建:空的 無向圖 G2 = nx.DiGraph() #創建:空的 有向圖 G3 = nx.MultiGraph() #創建:空的 多圖 G4 = nx.MultiDiGraph() #創建:空的 有向多圖# 圖的方法
# networkx
NetworkX 是一個進行復雜圖形網絡分析的 Python 軟件包。要了解 NetworkX 功能,首先需要了解圖形。圖形是一種數學結構,用于對物理、生物、社會和信息系統中多種類型的關系和過程進行建模。圖形由通過邊緣連接(表示這些實體之間的關系)的節點或頂點(表示系統實體)構成。圖形處理是一種能夠穿梭各邊緣和節點的功能,用于發現和理解網絡中關聯數據之間的復雜關系和/或優化路徑。
其中,nx.draw() 和 nx.draw_networkx() 是最基本的繪圖函數,并可以通過自定義函數屬性或其它繪圖函數設置不同的繪圖要求。
?
二、networkx繪制帶權無向圖
import matplotlib.pyplot as plt # 導入 Matplotlib 工具包 import networkx as nx # 導入 NetworkX 工具包# 問題 2:無向圖的最短路問題(司守奎,數學建模算法與應用,P43,例4.3) G2 = nx.Graph() # 創建無向圖 G2.add_weighted_edges_from([(1, 2, 2), (1, 3, 8), (1, 4, 1),(2, 3, 6), (2, 5, 1),(3, 4, 7), (3, 5, 5), (3, 6, 1), (3, 7, 2),(4, 7, 9),(5, 6, 3), (5, 8, 2), (5, 9, 9),(6, 7, 4), (6, 9, 6),(7, 9, 3), (7, 10, 1),(8, 9, 7), (8, 11, 9),(9, 10, 1), (9, 11, 2),(10, 11, 4)]) # 向圖中添加多條賦權邊: (node1,node2,weight)# 兩個指定頂點之間的最短加權路徑 minWPath_v1_v5 = nx.dijkstra_path(G2, source=1, target=5) # 頂點 0 到 頂點 3 的最短加權路徑 print("頂點 v1 到 頂點 v5 的最短加權路徑: ", minWPath_v1_v5) # 兩個指定頂點之間的最短加權路徑的長度 lMinWPath_v1_v5 = nx.dijkstra_path_length(G2, source=1, target=5) # 最短加權路徑長度 print("頂點 v1 到 頂點 v5 的最短加權路徑長度: ", lMinWPath_v1_v5) # === 關注 Youcans 原創系列(https://blog.csdn.net/youcans)=== pos = nx.spring_layout(G2) # 用 FR算法排列節點 nx.draw(G2, pos, with_labels=True, alpha=0.5) labels = nx.get_edge_attributes(G2, 'weight') nx.draw_networkx_edge_labels(G2, pos, edge_labels=labels) plt.show()?
?
三、networkx繪制帶權有向圖
import matplotlib.pyplot as plt # 導入 Matplotlib 工具包 import networkx as nx # 導入 NetworkX 工具包# 問題 2:無向圖的最短路問題(司守奎,數學建模算法與應用,P43,例4.3) G2 = nx.DiGraph() # 創建:空的 有向圖G2.add_edge(1, 2, weight=1) # 添加 帶權邊,weight表示邊權 G2.add_edge(5, 3, weight=7) G2.add_edge(2, 3, weight=4) G2.add_edge(3, 4, weight=3) G2.add_edge(7, 9, weight=4) G2.add_edge(3, 5, weight=5) G2.add_edge(4, 7, weight=9)# 兩個指定頂點之間的最短加權路徑 minWPath_v1_v5 = nx.dijkstra_path(G2, source=1, target=5) # 頂點 0 到 頂點 3 的最短加權路徑 print("頂點 v1 到 頂點 v5 的最短加權路徑: ", minWPath_v1_v5) # 兩個指定頂點之間的最短加權路徑的長度 lMinWPath_v1_v5 = nx.dijkstra_path_length(G2, source=1, target=5) # 最短加權路徑長度 print("頂點 v1 到 頂點 v5 的最短加權路徑長度: ", lMinWPath_v1_v5) # === 關注 Youcans 原創系列(https://blog.csdn.net/youcans)=== pos = nx.spring_layout(G2) # 用 FR算法排列節點 nx.draw(G2, pos, with_labels=True, alpha=0.5) labels = nx.get_edge_attributes(G2, 'weight') nx.draw_networkx_edge_labels(G2, pos, edge_labels=labels) plt.show()?
四、networkx標注特定路徑
import matplotlib.pyplot as plt # 導入 Matplotlib 工具包 import networkx as nx # 導入 NetworkX 工具包# 問題 2:無向圖的最短路問題(司守奎,數學建模算法與應用,P43,例4.3) G2 = nx.DiGraph() # 創建:空的 有向圖G2.add_edge(1, 2, weight=1) # 添加 帶權邊,weight表示邊權 G2.add_edge(5, 3, weight=7) G2.add_edge(2, 3, weight=4) G2.add_edge(3, 4, weight=3) G2.add_edge(7, 9, weight=4) G2.add_edge(3, 5, weight=5) G2.add_edge(4, 7, weight=9)# 兩個指定頂點之間的最短加權路徑 minWPath_v1_v5 = nx.dijkstra_path(G2, source=1, target=5) # 頂點 0 到 頂點 3 的最短加權路徑 print("頂點 v1 到 頂點 v5 的最短加權路徑: ", minWPath_v1_v5) # 兩個指定頂點之間的最短加權路徑的長度 lMinWPath_v1_v5 = nx.dijkstra_path_length(G2, source=1, target=5) # 最短加權路徑長度 print("頂點 v1 到 頂點 v5 的最短加權路徑長度: ", lMinWPath_v1_v5) # === 關注 Youcans 原創系列(https://blog.csdn.net/youcans)=== pos = nx.spring_layout(G2) # 用 FR算法排列節點 nx.draw(G2, pos, with_labels=True, alpha=0.5) labels = nx.get_edge_attributes(G2, 'weight') nx.draw_networkx_edge_labels(G2, pos, edge_labels=labels) # plt.show()edgeList = [] for i in range(len(minWPath_v1_v5)-1):edgeList.append((minWPath_v1_v5[i], minWPath_v1_v5[i+1])) nx.draw_networkx_edges(G2, pos, edgelist=edgeList, edge_color='m', width=4) # 設置邊的顏色 plt.show() # YouCans, XUPT總結
以上是生活随笔為你收集整理的python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ant设置国际化设置为中文
- 下一篇: 随机森林模型及案例(Python)