图的创建
即构建Graph/DiGraph/MultiGraph/MultiDiGraph对象,三种方式:
- 使用图产生器(Graph generators)产生一些典型的图如完全图、树状图,可以用这个很方便的构造一些模拟数据来进行算法的测试
G=nx.balanced_tree(3,3)
nx.draw(G)
上面的代码创建了一个三层的树状图
- 从其它文件中导入
- 显式的添加结点和边
图报告
实在是不知道怎么翻译“Graph Reporting”,这个意思其实就是图对象的一些函数,这些函数可以返回一些简单的图的信息,比如图的结点、边、每个结点的度、图是否是有向、图中所有的自环边,前面说到了像最短路径、连通图等较复杂的算法则在api那些全局函数中实现,图对象将作为参数传进去,下面是一些简单的报告函数:import networkx as nx
g = nx.DiGraph()
g.add_edge(1, 2)
g.add_edge(2, 3)
g.add_edge(3, 4)
g.add_edge(4, 2)
g.add_edge(4, 4)
print(g.nodes())
print(g.edges())
print(g.degree())
print(g.is_directed())
print(list(g.selfloop_edges()))
输出:
[1, 2, 3, 4]
[(1, 2), (2, 3), (3, 4), (4, 2), (4, 4)]
[(1, 1), (2, 3), (3, 2), (4, 4)]
True
[(4, 4)]
图算法
networkx中包含非常多的算法,主要包含以下几大类:- 图的遍历算法
- 图的最短路径算法
- 图的中心度测量算法
- 图的连通图算法
- 图的最大流算法
- 图的社区检测算法
G=nx.Graph()
e=[('a','b',0.3),('b','c',0.9),('a','c',0.5),('c','d',1.2)]
G.add_weighted_edges_from(e)
print(nx.dijkstra_path(G,'a','d'))
输出:
['a', 'c', 'd']
图的可视化
networkx定位为图分析库,可视化并不是它擅长的,虽然它实现了一些简单的布局算法,但还是建议使用其它专门的图可视化库如Cytoscape, Gephi, Graphviz如:G=nx.cubical_graph()
nx.draw(G,pos=nx.spectral_layout(G), nodecolor='r',edge_color='b')
上面的例子创建了一个立方体图,并用networkx自带的spectral_layout布局算法可视化