NetworkX を利用する

基本的なコードの書き方を習得する

以降、次のインポートを断りなしに用いる:

import networkx as nx
import matplotlib.pyplot as plt

小さいグラフを定義して、単純な計算をさせてみることで NetworkX でのプログラミングの感触を確かめてみよう。

Dijkstra 法による最短経路

別ページ 参照。

グラフィックを描画する

先程のグラフを Matplotlib の表示機能を利用してウィンドウに出力する方法を示す。試行錯誤の結果、次のコードが最も見やすいイメージを描画してくれた。

#!/usr/bin/env python
"""neteworkx_draw.py: nx.draw_networkx demonstration"""

import networkx as nx
import matplotlib.pyplot as plt

# Make a graph.
G = nx.Graph()

# Define edges with weights.
G.add_weighted_edges_from(
    ((0, 1, 10.0),
     (0, 2, 14.0),
     (0, 3, 12.0),
     (1, 2, 8.0),
     (1, 4, 19.0),
     (2, 3, 7.0),
     (2, 5, 22.0),
     (3, 5, 21.0),
     (4, 5, 11.0),))

# Position nodes using Fruchterman-Reingold force-directed algorithm.
pos = nx.spring_layout(G, k=5., random_state=0)

# Draw labels for nodes and edges.
nx.draw_networkx_labels(G, pos)

# Draw only weight attribute as edge label.
edge_labels = {(i, j): w['weight'] for i, j, w in G.edges(data=True)}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)

# Finish drawing.
nx.draw(G, pos)

# Display with Matplotlib.
plt.axis('off')
plt.show()

スクリプトをコンソールから実行すると、次のイメージを含む Matplotlib ウィンドウが開いたことがある。

なお、関数 spring_layout のキーワード引数として random_state を明示的に指定しないと、この関数は実行するたびにノードの位置をランダムに決定する。利用者は random_state の値を試行錯誤の結果、適切なものを発見する必要があるかもしれない。

NetworkX によるグラフの描画

描画については 別項 で詳しく論じる。