图的基本概念
2021-10-14
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

图的基本概念

  • 图(Graph):图是由若干顶点和连接顶点的边所构成关系结构
  • 顶点(Node):图中的点称为顶点,也称节点
  • 边(Edge):顶点之间的连线,称为边
  • 平行边(Parallel edge):起点相同、终点也相同的两条边称为平行边
  • 循环(Cycle):起点和终点重合的边称为循环
  • 有向图(Digraph):图中的每条边都带有方向,称为有向图
  • 无向图(Undirected graph):图中的每条边都没有方向,称为无向图
  • 赋权图(Weighted graph):图中的每条边都有一个或多个对应的参数,称为赋权图。该参数称为这条边的权,权可以用来表示两点间的距离、时间、费用
  • 度(Degree):与顶点相连的边的数量,称为该顶点的度

图、顶点和边的操作

Networkx很容易创建图、向图中添加顶点和边、从图中删除顶点和边,也可以查看、删除顶点和边的属性

图的创建

Graph() 类DiGraph() 类MultiGraph() 类MultiDiGraph() 类分别用来创建:无向图、有向图、多图和有向多图:
class Graph(incoming_graph_data=None, **attr)

顶点的添加、删除和查看

图的每个顶点都有唯一的标签属性(label),可以用整数或字符类型表示,顶点还可以自定义任意属性
顶点的常用操作:添加顶点,删除顶点,定义顶点属性,查看顶点和顶点属性:
Graph.add_node(node_for_adding, **attr)
Graph.add_nodes_from(nodes_for_adding, **attr)
Graph.remove_node(n)
Graph.remove_nodes_from(nodes)
 

边的添加、删除和查看

边是两个顶点之间的连接,在 NetworkX 中边是由对应顶点的名字的元组组成 e=(node1,node2)。边可以设置权重、关系等属性。
边的常用操作:添加边,删除边,定义边的属性,查看边和边的属性。向图中添加边时,如果边的顶点是图中不存在的,则自动向图中添加该顶点。
Graph.add_edge(u_of_edge, v_of_edge, **attr)
Graph.add_edges_from(ebunch_to_add, **attr)
Graph.add_weighted_edges_from(ebunch_to_add, weight=‘weight’, **attr)

查看图、顶点和边的信息

notion image
 

图的属性和方法

图的方法

方法
说明
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 添加闭合路径

图的绘制与分析

图的绘制

可视化是图论和网络问题中很重要的内容。NetworkX 在 Matplotlib、Graphviz 等图形工具包的基础上,提供了丰富的绘图功能。
基本绘图函数使用字典提供的位置将节点放置在散点图上,或者使用布局函数计算位置
方法
说明
draw(G[,pos,ax])
基于 Matplotlib 绘制 图 G
draw_networkx(G[, pos, arrows, with_labels])
基于 Matplotlib 绘制 图 G
draw_networkx_nodes(G, pos[, nodelist, . . . ])
绘制图 G 的顶点
draw_networkx_edges(G, pos[, edgelist, . . . ])
绘制图 G 的边
draw_networkx_labels(G, pos[, labels, . . . ])
绘制顶点的标签
draw_networkx_edge_labels(G, pos[, . . . ])
绘制边的标签
其中nx.draw() nx.draw_networkx() 是最基本的绘图函数,并可以通过自定义函数属性或其它绘图函数设置不同的绘图要求。
draw(G, pos=None, ax=None, **kwds)
draw_networkx(G, pos=None, arrows=True, with_labels=True, **kwds)
常用的属性定义如下:
  • ‘node_size’:指定节点的尺寸大小,默认300
  • ‘node_color’:指定节点的颜色,默认红色
  • ‘node_shape’:节点的形状,默认圆形
  • '‘alpha’:透明度,默认1.0,不透明
  • ‘width’:边的宽度,默认1.0
  • ‘edge_color’:边的颜色,默认黑色
  • ‘style’:边的样式,可选 ‘solid’、‘dashed’、‘dotted’、‘dashdot’
  • ‘with_labels’:节点是否带标签,默认True
  • ‘font_size’:节点标签字体大小,默认12
  • ‘font_color’:节点标签字体颜色,默认黑色
notion image

图的分析

NetwotkX 提供了图论函数对图的结构进行分析:
子图
  • 子图是指顶点和边都分别是图G的顶点的子集和边的子集的图
  • subgraph()方法,按顶点从图 G 中抽出子图
连通子图
  • 如果图 G 中的任意两点间相互连通,则 G 是连通图
  • connected_components()方法,返回连通子图的集合
强连通
  • 如果有向图 G 中的任意两点间相互连通,则称 G 是强连通图
  • strongly_connected_components()方法,返回所有强连通子图的列表
弱连通
  • 如果一个有向图 G 的基图是连通图,则有向图 G 是弱连通图
  • weakly_connected_components()方法,返回所有弱连通子图的列表
 
 
 
 
 
 
 
 
  • NetworkX
  • NetworkX最短路径算法
    目录