边的常用操作:添加边,删除边,定义边的属性,查看边和边的属性。向图中添加边时,如果添加的边的顶点是图中不存在的,则自动向图中添加该顶点。
# 边(edge)的操作 G1.add_edge(1,5) # 向 G1 添加边 1-5,并自动添加图中没有的顶点 G1.add_edge(0,10, weight=2.7) # 向 G1 添加边 0-10,并设置属性 G1.add_edges_from([(1,2,{'weight':0}), (2,3,{'color':'blue'})]) # 向图中添加边,并设置属性 print(G1.nodes()) # 查看顶点 # [2, 3, 0, 6, 4, 5, 7, 10, 12, 1] # 自动添加了图中没有的顶点 1 G1.add_edges_from([(3,6),(1,2),(6,7),(5,10),(0,1)]) # 向图中添加多条边 G1.add_weighted_edges_from([(1,2,3.6),[6,12,0.5]]) # 向图中添加多条赋权边: (node1,node2,weight) G1.remove_edge(0,1) # 从图中删除边 0-1 # G1.remove_edges_from([(2,3),(1,5),(6,7)]) # 从图中删除多条边 # print(G1.edges(data=True)) # 查看所有边的属性 print(G1.edges) # 查看所有边 # [(2, 1), (2, 3), (3, 6), (0, 10), (6, 7), (6, 12), (5, 1), (5, 10)] print(G1.get_edge_data(1,2)) # 查看指定边 1-2 的属性 # {'weight': 3.6} print(G1[1][2]) # 查看指定边 1-2 的属性 # {'weight': 3.6}查看图、顶点和边的信息
print(G1.nodes) # 返回所有的顶点 [node1,...] # [1, 2, 0, 6, 4, 12, 5, 9, 8, 3, 7] print(G1.edges) # 返回所有的边 [(node1,node2),...] # [(1,5), (1,2), (2,8), (2,3), (0,9), (6,5), (6,7), (6,12), (4,3), (4,5), (9,8), (8,7)] print(G1.degree) # 返回各顶点的度 [(node1,degree1),...] # [(1,2), (2,3), (0,1), (6,3), (4,2), (12,1), (5,3), (9,2), (8,3), (3,2), (7,2)] print(G1.number_of_nodes()) # 返回所有的顶点 [node1,...] # 11 print(G1.number_of_edges()) # 返回所有的顶点 [node1,...] # 12 print(G1[2]) # 返回指定顶点相邻的顶点和顶点的属性 # {1: {'weight': 3.6}, 8: {'color': 'blue'}, 3: {}} print(G1.adj[2]) # 返回指定顶点相邻的顶点和顶点的属性 # {1: {'weight': 3.6}, 8: {'color': 'blue'}, 3: {}} print(G1[6][12]) # 返回指定边的属性 # {'weight': 0.5} print(G1.adj[6][12]) # 返回指定边的属性 # {'weight': 0.5} print(G1.degree(5)) # 返回指定顶点的度 # 3 print('nx.info:',nx.info(G1)) # 返回图的基本信息 print('nx.degree:',nx.degree(G1)) # 返回图中各顶点的度 print('nx.density:',nx.degree_histogram(G1)) # 返回图中度的分布 print('nx.pagerank:',nx.pagerank(G1)) # 返回图中各顶点的频率分布 2.3 图的属性和方法图的方法
方法 说明G.has_node(n) 当图 G 中包括顶点 n 时返回 True
G.has_edge(u, v) 当图 G 中包括边 (u,v) 时返回 True
G.number_of_nodes() 返回 图 G 中的顶点的数量
G.number_of_edges() 返回 图 G 中的边的数量
G.number_of_selfloops() 返回 图 G 中的自循环边的数量
G.degree([nbunch, weight]) 返回 图 G 中的全部顶点或指定顶点的度
G.selfloop_edges([data, default]) 返回 图 G 中的全部的自循环边
G.subgraph([nodes]) 从图 G1中抽取顶点[nodes]及对应边构成的子图
union(G1,G2) 合并图 G1、G2
nx.info(G) 返回图的基本信息
nx.degree(G) 返回图中各顶点的度
nx.degree_histogram(G) 返回图中度的分布
nx.pagerank(G) 返回图中各顶点的频率分布
nx.add_star(G,[nodes],**attr) 向图 G 添加星形网络
nx.add_path(G,[nodes],**attr) 向图 G 添加一条路径
nx.add_cycle(G,[nodes],**attr) 向图 G 添加闭合路径
例程:
# Copyright 2021 YouCans, XUPT G1.clear() # 清空图G1 nx.add_star(G1, [1, 2, 3, 4, 5], weight=1) # 添加星形网络:以第一个顶点为中心 # [(1, 2), (1, 3), (1, 4), (1, 5)] nx.add_path(G1, [5, 6, 8, 9, 10], weight=2) # 添加路径:顺序连接 n个节点的 n-1条边 # [(5, 6), (6, 8), (8, 9), (9, 10)] nx.add_cycle(G1, [7, 8, 9, 10, 12], weight=3) # 添加闭合回路:循环连接 n个节点的 n 条边 # [(7, 8), (7, 12), (8, 9), (9, 10), (10, 12)] print(G1.nodes) # 返回所有的顶点 [node1,...] nx.draw_networkx(G1) plt.show() G2 = G1.subgraph([1, 2, 3, 8, 9, 10]) G3 = G1.subgraph([4, 5, 6, 7]) G = nx.union(G2, G3) print(G.nodes) # 返回所有的顶点 [node1,...] # [1, 2, 3, 8, 9, 10, 4, 5, 6, 7] 3、图的绘制与分析 3.1 图的绘制可视化是图论和网络问题中很重要的内容。NetworkX 在 Matplotlib、Graphviz 等图形工具包的基础上,提供了丰富的绘图功能。