这几天在用networkx,官方文档是这个,很全也很详细,这里简单记录一些简单的用法和使用过程中的菜鸡看法。
这篇主要记一下networkx基本图创建和如何画图。
环境
Python 3.6.3
networkx 2.4
matplotlib 2.1.0
图的创建
这里主要介绍一下networkx中定义的图结构,以及以无向图为例的用法。
图的类型
networkx中规定了四种图:无向图、有向图、多重无向图、多重有向图,所有图允许出现自环。
区别:
名称 | 方向 | 多重边 |
---|---|---|
Graph | 无向 | 无 |
DiGraph | 有向 | 无 |
MultiGraph | 无向 | 有 |
MultiDiGraph | 无向 | 有 |
我的实验中用Graph类型的比较多,所以这里先介绍一下无向图Graph的用法。
在networkx里面,图的点、边的都是xxView这样一个结构,有的时候需要转换一下才能直接读取(具体是个什么我也不知道,但是看起来像个字典,我也是这么理解的)
新建无向图
import networkx
# 新建一个空的无向图G
G = nx.Graph()
加入节点
# 一次加入一个结点
G.add_node(0)
# 从列表中加入节点
G.add_nodes_from([1,2])
# 从另一个图H中合并,path_graph(n)表示生成一个n个结点的路径图
H = nx.path_graph(10)
G.add_nodes_from(H)
以第三种方式加入结点时,H可以作为G的一个结点使用。
加入边
# 一次加入一条边
G.add_edge(1,2)
# 从列表中加入边,注意括号
G.add_edges_from([(1,2),(2,3)])
# 从另一个图H中合并
G.add_edges_from(H.edges)
删除
G.remove_node(1)
G.remove_nodes_from([2,3])
G.remove_edge(5,6)
G.remove_edges_from([(7,8),(8,9)])
删除点边和加入点边操作类似,需要注意的是删除一个点时会删除与之连接的所有边。
查看图