【Python】networkx图节点和与边操作(4)

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

目录

1、移除某些节点和边

2、合并graph

3、有向图和无向图的转化

这个博主讲的真的很不错,很适合入门~


1、移除某些节点和边

#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()

【Python】networkx图节点和与边操作(4)_第1张图片

2、合并graph

# 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()

【Python】networkx图节点和与边操作(4)_第2张图片

3、有向图和无向图的转化

#无向图转有向图
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()

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

【Python】networkx图节点和与边操作(4)_第3张图片

 

参考:

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

你可能感兴趣的:(编程语言)