前言:
本篇博客主要是总结如何利用python创建图,包括结点、边的增删,以及如何查看图的相关属性。
目录
1.预备工作
(1)安装Networkx包
pip install networkx
(2)导入包
import networkx as nx
(3) 创建图
# 创建一个空图G
G = nx.Graph()
2.创建图的结点
方式1:G.add_node(),一次只能添加一个结点,对象可以是整数、字符、字符串
方式2:G.add_nodes_from(),一次可以添加多个结点
# 方式1:一次只能添加一个结点
#添加结点,名分别为'0' 和‘11’
G.add_node('0')
G.add_node('11')
# 方式2: 一次可以添加多个结点,对象可以是整数、列表、字符串等
# 添加两个结点,名为1 和 ’node4'
G.add_nodes_from([ 1,"node4"])
# 添加5个结点,名称分别为:‘n' 'o' 'd' 'e' '4'
G.add_nodes_from("node4")
# 输出图G的结点
print(G.nodes())
需要说明的是在利用方式2添加多个结点的时候,没有以下形式:
G.add_nodes_from( 1,"node4")
报错:
3.创建图的边
方式1: add_edge(): 一次只可以添加一条边
方式2: add_edges_from():一次可以添加多条边
# 创建一个空图G
G = nx.Graph()
# 添加结点,结点的对象可以是整数、字符串
G.add_nodes_from([0,1,2,3])
# 输出图G的结点
print(G.nodes())
# 添加边
#方式1: 一次可以添加一条边
G.add_edge(0,1)
#方式2:一次可以添加多个边
G.add_edges_from([ (1, 2), (2, 3), (3, 0)])
# 图的显示
nx.draw(G, with_labels=True, alpha=0.8, node_size=500)
效果图:
4.结点、边的删除
(1) remove_node() :删除一个结点以及和结点相关联的边,如果没有任何节点,报错NetworkxError
(2) remove_nodes_from() :该方法接受一个可迭代容器,并从图中删除与这些节点相关的所有节点和边。如果图中不存在任何节点,它将不做任何更改,默默地丢弃它。
(3) remove_edge() :该方法从图中删除一条边,保持结点不变。如果该边在图中不存在,它将引发NetworkXError。
(4) remove_edges_from() :该方法接受一个可迭代容器,并从图中删除边。如果图中不存在任何边,它将不做任何更改,默默地丢弃它。
5.查看图的结点、边、结点的度数以及结点的邻接表
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个空图G
G = nx.Graph()
# 添加结点,结点的对象可以是整数、字符串
G.add_node(4)
G.add_nodes_from([0,1,2,3])
# 添加边
#方式1: 一次可以添加一条边
G.add_edge(0,1)
#方式2:一次可以添加多个边
G.add_edges_from([ (1, 2), (2, 3), (3, 0)])
# 图的显示
nx.draw(G, with_labels=True, alpha=0.8, node_size=500)
#显示图的信息
#图G所有结点
print(G.nodes())
#图G所有边
print(G.edges())
#结点3的邻接表
print(G.adj[3])
#结点3的度数
print(G.degree[3])
#所有结点的邻接表
print(G.adj)
#所有结点的度数,输出形式:(结点,该结点的度数)
print(G.degree)
参考资料:
推荐阅读:
networkx(图论)的基本操作 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/40852672