python networkx 笔记

至少比自己手写迪杰斯特拉强

Posted by LCY on February 5, 2018

基本操作

添加图

import networkx as nx

g = nx.Graph()
g.add_edge(u,v,**kwargs)

type of graph

networkx中的图,可以随意的添加附加信息, g.node&g.edge返回的是一个包含有给与信息的字典。

type of graph

g.degree()
# or 
nx.degree(g)

返回字典,节点id —-> 节点的度

图论算法

常用图论算法,参考官方文档

Networkx Algorithms

特殊网络生成

  • 规则图 random_graphs.random_regular_graph(d, n)
  • ER随机图 nx.random_graphs.erdos_renyi_graph(20, 0.2)
  • WS小世界网络 nx.random_graphs.watts_strogatz_graph(20, 4, 0.3)
  • BA无标度网络 random_graphs.barabasi_albert_graph(n, m)

画图

  • 无节点标号的简单图
    nx.draw(G, pos=None, ax=None, hold=None, **kwds)
    
  • 有节点标号
    nx.draw_networkx(G, pos=None, with_labels=True, **kwds)
    

    颜色&大小

nx.draw(self.g,pos = self.pos, node_size = [x*30 for x in nx.degree(self.g).values()],
                        edge_color = 'gray', 
        				node_color = ['black' if i else 'r' for i in self.visited],
        				alpha = 0.8)
  • edge_color:边的颜色,列表或数字

  • node_color:节点颜色,列表或数字

  • alpha:透明度,仅数字

  • node_size:节点大小,列表或数字

pos(layout)

通过一定算法对图的位置进行计算,确定合理的布局。计算量比较大,多个图绘制时可保存此数据,加快绘图速度。

layout 介绍
circular_layout(G[, dim, scale, center]) Position nodes on a circle.
fruchterman_reingold_layout(G[, dim, k, …]) Position nodes using Fruchterman-Reingold force-directed algorithm.
random_layout(G[, dim, scale, center]) Position nodes uniformly at random.
shell_layout(G[, nlist, dim, scale, center]) Position nodes in concentric circles.
spring_layout(G[, dim, k, pos, fixed, …]) Position nodes using Fruchterman-Reingold force-directed algorithm.
spectral_layout(G[, dim, weight, scale, center]) Position nodes using the eigenvectors of the graph Laplacian.

批量输出保存

使用plt.figure等方法

import ...
import matplotlib.pyplot as plt

g = createG(node_num) # networkx.Graph
pos = nx.spring_layout(g)
for i in range(nums):
    img = plt.figure(figsize=(15,15)) #单位英寸
    nx.draw(g,**kwargs)
    img.savefig('{}_{}.jpg'.format(name,i), dpi=100)
    g = createG(node_num)# next graph
    

附录

其他博文

[python复杂网络库networkx:绘图draw

](http://blog.csdn.net/pipisorry/article/details/54291831)

官方文档

NetworkX Overview

数据集

Stanford Large Network Dataset Collection