# python networkx 笔记

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

Posted by LCY on February 5, 2018

## 基本操作

### 添加图

import networkx as nx

g = nx.Graph() networkx中的图，可以随意的添加附加信息， g.node&g.edge返回的是一个包含有给与信息的字典。 ### 度

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


### 图论算法

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.

### 批量输出保存

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



## 附录

### 其他博文

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

### 官方文档

NetworkX Overview

### 数据集

Stanford Large Network Dataset Collection 