irpas技术客

python 使用networkx绘制带权无向图和带权有向图,以及标注特定路径_水w_python创建无向图

大大的周 7386

目录

一、图的创建

# 图的创建

# 图的方法

# 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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #python创建无向图 #Python