NetworkX系列教程(6)-对graph进行操作

graph生成后,除了有查看操作,还有移除等操作,还有其他更多操作,具体可以看这里.下面将比较graph操作前后的不同.

目录:

注意: 如果代码出现找不库,请返回第一个教程,把库文件导入.

对图进行操作

移除某些节点和边

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#G.clear()
#生成graph
G=nx.path_graph(8)

plt.subplots(1,2,figsize=(15,5))
plt.suptitle('移除部分节点和边',fontproperties=myfont)

#画出未操作前的graph
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.title('操作前',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

#移除部分节点和边,移除所有的点和边使用G.clear(),不再单独测试
G.remove_node(2)
G.remove_nodes_from([1,5])
G.remove_edge(3, 4)

#画出操作后的graph
plt.subplot(122)
nx.draw(G, with_labels=True, font_weight='bold')
plt.title('操作后',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

#显示graph
plt.show()

png

合并graph

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# G1.clear()
# G2.clear()
# G3.clear()

plt.subplots(1,3,figsize=(15,5))
plt.suptitle('合并两个图',fontproperties=myfont)

#生成graph1
G1=nx.path_graph(8)
plt.subplot(131)
nx.draw(G1, with_labels=True, font_weight='bold')
plt.title('图1',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

#生成graph2
G2=nx.complete_graph(3)
plt.subplot(132)
nx.draw(G2, with_labels=True, font_weight='bold')
plt.title('图2',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

#移除部分节点和边,移除所有的点和边使用G.clear(),不再单独测试
G3=nx.disjoint_union(G1,G2)
plt.subplot(133)
nx.draw(G3, with_labels=True, font_weight='bold')
plt.title('合并后',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

#显示graph
plt.show()

png

有向图和无向图的转化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#无向图转有向图
plt.subplots(1,2,figsize=(15,3))
plt.suptitle('无向图转换为有向图',fontproperties=myfont)

#定义无向图
G = nx.path_graph(8)
#转换为有向图
G2=G.to_directed()

#下面是可视化转换前后的两个图
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.title('无向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

plt.subplot(122)
nx.draw(G2, with_labels=True, font_weight='bold')
plt.title('有向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])
plt.show()
plt.close()

#有向图转无向图
G.clear()
G2.clear()
plt.subplots(1,2,figsize=(15,3))
plt.suptitle('有向图转换为无向图',fontproperties=myfont)

#定义有向图
G = nx.path_graph(8,create_using=nx.DiGraph())
#转换为无向图
G2=G.to_undirected()

#下面是可视化转换前后的两个图
plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
plt.title('有向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])

plt.subplot(122)
nx.draw(G2, with_labels=True, font_weight='bold')
plt.title('无向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])
plt.show()

# 注:可以看出无向图转有向图时,得到的边都是双向

png

png