networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示

时间:2024-04-09 13:06:07

最近在做带权图网络分析这块的工作,发现网络构建中,批量添加带属性值的边这部分比较全面的资料较少,因此根据自己查找的资料和实验,总结该部分内容如下

添加边:

G.add_edge(‘小红’,‘小粉’)

批量添加边:

1.只添加边,不包含属性值

G.add_edges_from([(‘小红’, ‘小黄’), (‘小黄’,‘小黑’)])

也可以直接将元组的列表作为参数

list=[(‘小红’, ‘小黄’), (‘小黄’,‘小黑’)]
G.add_edges_from(list)

2.添加包含属性值的边

首先介绍一个函数

#功能:在图中添加加权边 ebunch_to_add,并指定权重属性
add_weighted_edges_from(ebunch_to_add, weight=‘weight’, **attr)

参数:
ebunch_to_add
列表或容器中给出的每个边都将添加到图表中。边必须以三元组(u,v,w)的形式给出,其中w是一个数字。
weight
要添加的边权重的属性名称
attr
要为所有边添加/更新的边属性。(暂时还没理解啥意思)

另:
批量添加带属性的边(以下三种形式都可以实现):

G.add_weighted_edges_from([(‘小红’,‘小黄’, 7.0), (‘小红’, ‘小青’, 10),(‘小黄’,‘小青’,3)])#元组中的第三个参数默认为weight属性值
G.add_edges_from([(‘小红’,‘小黄’, {‘weight’:7.0}),(‘小红’,‘小青’,{‘weight’:10}),(‘小黄’,‘小青’,{‘weight’:3})])
G.add_edges_from([(‘小红’,‘小黄’), (‘小红’, ‘小青’),(‘小黄’,‘小青’)], weight=10)

networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示

边的属性可以在创建边的时候自己设置,边不止可以设置一种属性,可以设置多个属性(属性名由自己定义)
下面语句在创建三条边的同时,给该图设置了weight属性,并设置了具体的属性值

G.add_edges_from([(‘小红’,‘小黄’, {‘weight’:7.0}),(‘小红’,‘小青’,{‘weight’:10}),(‘小黄’,‘小青’,{‘weight’:3})])

输出显示weight属性的图形如下:
networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示

在此基础上还可以再添加其他属性,如下面语句,给这三条边设置属性score,并给出属性值:

G.add_edges_from([(‘小红’,‘小黄’, {‘score’:70}),(‘小红’,‘小青’,{‘score’:80}),(‘小黄’,‘小青’,{‘score’:90})])

输出显示score属性的图形如下:
networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示

3.修改边的属性值(两种形式):

G.edges[‘小红’, ‘小黄’][‘weight’] =10
G[‘小红’][‘小青’][‘weight’] = 100

再次查看weight属性的图形如下:
networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示

输出某条边的属性:
name = nx.get_edge_attributes(G, ‘score’)
print (name[‘小红’,‘小黄’])
输出结果为:10

完整代码如下给出(直接贴代码格式老出问题,所以直接贴图好了,见谅)
networkX带权图的构建中:添加边,批量添加边,添加带属性的边,以及图形展示