はじめに
pythonでネットワークグラフを描くために、networkxというライブラリがあります。
ネットワークグラフとは、このようなグラフです。

例えば、一つ一つの丸(ノード)を人間にして、人と人の繋がりを表現したりするのに使用します。
この記事のゴール
- networkxによるネットワークグラフの基本的な使い方が理解すること
- networkx.spring_layout()のk値をgifアニメーションで直感的に理解する
ノードの作り方
#ノードの作り方
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1, 2)
- 丸(ノード)を作るには、G.add_node()で作ることができます
- ノードとノードをつなげるエッジは、G.add_edge(,)でつなげることができます

任意の属性(attribute)のつけ方
各ノードには、任意の属性(attribute)を持たせることができます。
例えば、name
とid
というattributeを持たせる場合は以下のように記述します。
G.nodes[1]["id"] = "1"
Networkxによるノード位置の自動決定
Networkxの便利な機能の一つに、ノード位置の自動決定というものがあります。
例えば、ノードが多くなると配置を考えるのが大変ですよね。Networkxであれば、その悩みを解決できます。
Networkxでlayoutを自動決定するアルゴリズムの詳細は、Graph Layoutに記載されています。
そこで、今回は実際によく使われるspring layoutというのを使ってみます。
import numpy as np
import networkx as nx
node_num = 20
num = []
for x in np.linspace(0.0, 2, 200):
num.append(x)
G = nx.Graph()
for i in range(node_num):
G.add_node(i)
for i in range(len(G)):
for j in range(i,i+3):
G.add_edge(i,j)
n = 1
for i in num:
pos = nx.spring_layout(G, k=i, seed=20)
#nx.draw(G,pos)
nx.draw_networkx_nodes(G, pos, node_color='B',alpha=0.1)
nx.draw_networkx_edges(G, pos, alpha=0.4, edge_color='C')
plt.title("k="+str(np.round(i,2)))
plt.savefig('img/{0:04d}+.png'.format(n))
plt.show()
n = n+1
実行するときは、カレントディレクトリにimgというフォルダを作成して実行してくださいね。
作成されたpngから、gifアニメーションを作った結果がこちらです。

spring_layout(G, k=, seed=20)のkの値が大きくなるほどノードの分散性が高くなっていることがわかります。
seedの値は、ランダムシードの値なので、任意の数字でOKです。乱数を固定したいときに使用します。
まとめ
NetworkxによるネットワークグラフをGifアニメーションで解説しました。
- 丸(ノード)を作るには、G.add_node()で作ることができます
- ノードとノードをつなげるエッジは、G.add_edge(,)でつなげることができます
- spring_layout()で自動でノードを配置することができます
もっとpythonを学びたいという方は、こちらの記事も参考にしてみてください。
今回の記事は、以上です。
最後までお読み頂きありがとうございました。
コメント