python中networkx基本操作
python 中networkx相关基本操作
import networkx as nx#导入包
import matplotlib.pyplot as plt
#networkx是python的一个包,用于构建和操作复杂的图结构,提供分析图的算法。
#图是由定点,边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,
#表示两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息
#对于networkx创建的无向图,允许一条边的两个顶点是相同的,即允许出现自循环,但是不允许两个顶点之间存在多条边,即出现平行边。# 边和顶点都可以有自定义的属性,属性称作边和顶点的数据,每一个属性都是一个Key:Value对。
g=nx.Graph()#创建空的无向图
g=nx.DiGraph()#创建空的有向图
g.add_node(1)#在空图中添加节点
g.add_nodes_from([2,3,4])#[2,3,4]为节点的ID
print(“添加节点后的图说有顶点的信息为:”,g.nodes(data=True))
#g.nodes(data=Ture)返回节点的ID和属性
print(“添加节点后的图的所有顶点的视图:”,g.nodes())#获得图的所有顶点视图
#g.nodes()返回节点的ID
g.add_node(1,name=‘A’,weight=1)#添加节点时除了可以传入ID还可以设置节点名字和相应的权值
g.add_node(2,name=‘B’,weight=1.2)
print(“查看图中所有顶点和属性的信息:\n”,g._node)
#g._node查看图中所有节点的属性信息,返回的是一个字典结构,字典的关键字是顶点的ID属性,Value属性树顶点的其他属性构成的一个字典
print(“查看节点1的相关属性:\n”,g.node[1])
#g.node[1]可以通过访问对应节点的ID来查看对应节点的相关属性
print(“查看节点1的名字:\n”,g.node[1][“name”])
#可以通过访问字典键值的方式来获得节点的任何信息
print(“按特定的条件来查看节点:\n”,list(g.nodes(data=True))[0][1][‘weight’])
print("=")
#删除操作# g.remove_node(3)#删除节点3
g.remove_nodes_from([3,4])#删除节点3,4
print(“删除一个节点后的视图为:\n”,g.nodes(data=True))
print("")
#更新节点
g._node[1].update({‘name’:“C”})#使用字典的结构函数来更新节点数据
print(“更新节点之后的顶点信息为:\n”,g.nodes(data=True))
g.node[1][“name”]=“D”
print(“更新节点之后的顶点信息为:\n”,g.node[1])
del g.node[1][“name”]
print(“删除节点1的名字属性后结果为:\n”,g.node[1])
n=[True if 3 in g else False]
print(“检查节点3是否在图中:\n”,n)
a=g.has_node(3)#检查节点3是否在图中
print(“检查节点3是否在图中:\n”,a)
print("=========================================")
#添加边,可以一次加一条也可以一次加多条,在添加边时,如顶点不存在,networkx会自动把顶点加入相应的图中
g.node[1][‘name’]=“A”
g.add_nodes_from([3,4,5])
g._node[3].update({“name”:“C”,“weight”:1.4})
g._node[4].update({“name”:“D”,“weight”:1.5})
g._node[5].update({“name”:“E”,“weight”:1.6})
print(“设置了新属性,添加了新节点的图全部节点的视图为:\n”,g._node)
print("=")
#边的操作
#添加边# g.add_edge(2,3)#添加一条边
g.add_edges_from([(1,2),(1,3),(1,4),(2,5)])
print(“查看添加边之后的图的所有边信息:\n”,g.edges())
g.add_edge(2,3,weight=4.7,relationship=‘renew’)#再添加变得同时也可设置边得关系和权值
#由于在图中,边的权重weight是非常有用和常用的属性,# 因此,networkx模块内置以一个函数,专门用于在添加边时设置边的权重,# 该函数的参数是三元组,前两个字段是顶点的ID属性,用于标识一个边,第三个字段是边的权重:
g.add_weighted_edges_from([(2,4,0.125),(2,5,0.12),(3,4,0.99),(3,5,1.0)])
#在添加边时可以添加多条边,可以为不同得边设置不同的属性
g.add_edges_from([(1,2,{“color”:“blue”}),(4,5,{“weight”:8})])
print(“查看图中所有边的属性为:\n”,g.edges(data=True))
print(“第一种方法查看1,2节点的边的属性信息:”,g[1][2])
print(“第二种方法查看1,2节点之间边的属性信息:\n”,g.get_edge_data(1,2))
#移除边# g.remove_edge(1,2)# print(“移除1,2节点之间的边之后的所有边的信息:\n”,g.edges(data=True))
#更新节点# g.edge[1][2][‘weight’]=4#python3 错误表达
g[1][2][‘weight’]=4.7
g[1][2].update({‘weight’:4.3})
g.edges[1,2].update({‘weight’:4.6,‘name’:“one_two”})
print(“进行边更新操作之后图中所有边的信息为:\n”,g.edges(data=True))
#删除操作# del g[1][2][“name”]# print(“删除节点一和节点二之间边之后的图的所有边的信息为:\n”,g.edges(data=True))
#检查一条边是否存在图中
n=g.has_edge(1,2)#返回值为布尔类型
print(“检查节点一和节点二之间的边是否在图中:”,n)
print("")
#图的属性,主要指相邻数据,节点和边
#adj返回的是一个AdjacencyView视图,该视图是顶点的相邻的顶点和顶点的属性,# 用于显示用于存储与顶点相邻的顶点的数据,这是一个只读的字典结构,Key是顶点,Value是顶点的属性数据。
print(“图的节点一与节点二之间边的数据:\n”,g.adj[1][2])
print(“与图的节点一相邻的节点信息为:\n”,g.adj[1])#返回的是一个字典类型,即与节点一的相连的边
#边的属性
print(“查看图的所有边:\n”,g.edges)
print(“查看图的所有边的数据和信息:\n”,g.edges.data())
print(“查看图的所有节点:\n”,g.nodes)
print(“查看图的所有节点数据为:\n”,g.nodes.data())
#度(degree),对于无向图,节点的度指的是与接连的边的数量,对于有向图,顶点的度分为入度和出度,朝向顶点的边成为入度,背向顶点的边成为出度
print(“节点一的度为:”,g.degree([1,2]))#g.degree()其中可以同时查看一个节点的度,也可以查看多个节点的度,返回值为一个数组
print("=")
#图的遍历
#图的遍历是指按照图中各顶点之间的边,# 从图中的任一顶点出发,对图中的所有顶点访问一次
#且只访问一次。图的遍历按照优先顺序的不同,通常分为深度优先搜索(DFS)和广度优先搜索(BFS)两种方式
print(“图中节点一的相邻节点为:\n”,g[1])
print(“图中节点一的相邻节点为:\n”,g.adj[1])#查看节点一的相邻节点
print(“图中节点一的相邻节点为:\n”,g.neighbors(1))
#其中,g.neighbors(n)是g.adj[n]的迭代器版本
#查看图的相邻
for n,nbrs in g.adjacency():
print(n)
print(nbrs)
print("")
#在进行图遍历时,需要访问顶点的相邻顶点,这需要用到adjacency()函数,例如,g是一个无向图,n是顶点,nbrs是顶点n的相邻顶点,是一个字典结构
for n,nbrs in g.adjacency():
print(n,nbrs)
for nbr,attr in nbrs.items():
#nbr表示与n连接的顶点,atrr表示这两个点连边的属性集合
print(nbr,attr)
print("==================")
#绘制相关图形,使用networkx模块draw()函数构造graph,使用matplotlib把图显示出来
nx.draw(g)#draw()函数来构造graph
plt.show()#使用图mathplotlib将其显示出来
#修改顶点颜色和边的颜色
g=nx.cubical_graph()
nx.draw(g,pos=nx.spectral_layout(g),node_color=‘r’,edge_color=‘b’)
plt.show()