python networkxでグラフ書く

pythonでグラフ書くのが楽過ぎたので感動ついでに。
(参考:Amazon.co.jp: IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集: Cyrille Rossant, 菊池 彰: 本)

例:10頂点の完全グラフ

import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

n = 10
adj = [(i,j%n) for i in range(n) for j in range(i+1,n)]    #辺のリスト
g = nx.Graph(adj)
nx.draw_circular(g)     #頂点をサイクル上に並べてグラフを描画
plt.savefig("compGraph.png")   #描画したやつを保存

んでできたのがこれ。
f:id:g0nChang:20160221234833p:plain
グラフ描画がたったこれだけで済むなんて!!!!
学生のころは

 ・graphvizインストールして
 ・C言語で隣接行列書いて
 ・隣接行列からgraphviz用グラフ描画言語を作って
 ・コマンドプロンプトで専用コマンド叩いて完成

というスーパーめんどくさい方法とっていたのでかなり感動した。

ランダムグラフ描画も簡単。(参考:自分のためのnetworkXメモ - 何かを書き留める何か)

#n=20, p=0.3
rg = nx.fast_gnp_random_graph(20, 0.3)
nx.draw_circular(rg)

f:id:g0nChang:20160221235932p:plain

やりたいことに対して、最も効率的な手段を選ぶって大事だなって思いました。