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
の値を試行錯誤の結果、適切なものを発見する必要があるかもしれない。
描画については 別項 で詳しく論じる。