🎓 レベル:基礎 | 重要度:B(推奨)
📎 前提:グラフの表現・グラフラプラシアンとスペクトル | 関連:コミュニティ検出とは
要点(BLUF)
- 可視化=座標決め:グラフ自体には位置情報がない。ノードに を割り当てるのがレイアウトアルゴリズム。
- 力学モデル(spring/Fruchterman–Reingold):エッジをばね、ノード間を斥力とみなし、エネルギー最小の配置を探す。密な集団が近くに集まる。
- 「正しいレイアウト」はない。何を読みたいか(コミュニティ・ハブ・全体構造)で選ぶ。大規模では可視化より指標が有効。
概念:グラフには位置がない
グラフは「誰と誰が繋がるか」だけの情報で、ノードがどこにあるかは決まっていません(グラフの表現)。だから可視化とは本質的にノードに座標を与える作業=レイアウトアルゴリズムです。良いレイアウトは、繋がりの強い集団を近くに、橋渡しを目立つ位置に置いて、構造を一目で読めるようにします。
代表的なレイアウト
| レイアウト | 原理 | 得意なこと |
|---|---|---|
| spring(力学モデル) | エッジ=ばね、ノード間=斥力でエネルギー最小化 | コミュニティの分離、汎用 |
| circular(円環) | ノードを円周に等間隔配置 | 小規模・エッジ密度の比較 |
| kamada–kawai | グラフ上の最短路距離を平面距離で近似 | 距離構造の保持 |
| spectral | ラプラシアン固有ベクトルを座標に使う | コミュニティが軸方向に分離 |
特に力学モデル(Fruchterman–Reingold)は、物理シミュレーションでエネルギーを最小化します。
第1項は「繋がったノードを適正距離 に保つばね」、第2項は「すべてのノードを互いに離す斥力」。この綱引きの釣り合いが、密な集団を塊に、疎な部分を引き離した配置を生みます。スペクトルレイアウトはラプラシアン(グラフラプラシアンとスペクトル)の固有ベクトルを座標にするので、スペクトルクラスタリングと同じ原理でコミュニティが分かれます。
同じグラフ、4つの見え方
下図は空手クラブを4つのレイアウトで描いたもの(ノードの大きさ・色=次数)。同じネットワークが、座標の決め方でまるで違って見えます。

import networkx as nx
import matplotlib.pyplot as plt
import japanize_matplotlib
G = nx.karate_club_graph()
degrees = dict(G.degree())
sizes = [degrees[n] * 40 for n in G.nodes()] # 次数でノードサイズ
layouts = {
"spring": nx.spring_layout(G, seed=42),
"circular": nx.circular_layout(G),
"kamada_kawai": nx.kamada_kawai_layout(G),
"spectral": nx.spectral_layout(G),
}
fig, axes = plt.subplots(2, 2, figsize=(13, 11))
for ax, (title, pos) in zip(axes.flat, layouts.items()):
nx.draw_networkx_edges(G, pos, ax=ax, alpha=0.3)
nx.draw_networkx_nodes(G, pos, ax=ax, node_size=sizes,
node_color=list(degrees.values()), cmap="viridis")
ax.set_title(title); ax.axis("off")
fig.savefig("figures/network_layouts.png", dpi=110, bbox_inches="tight")
springとkamada–kawaiでは2つの派閥が左右に分かれて見え、ハブ(大きい黄色のノード)が各派閥の中心に陣取ります。circularは構造を無視して円に並べるのでエッジの混み具合しか分からず、spectralはコミュニティが軸方向にくっきり分離します。
数式の直観的意味
力学モデルの は「繋がりたいノードは近づけ、無関係なノードは離す」という相反する力の妥協点です。ばねが集団を凝集させ、斥力が全体を広げる。エネルギー最小の配置では、密に繋がった集団が自然に塊(コミュニティ、コミュニティ検出とは)として浮かび上がります。つまり可視化は、コミュニティ検出と同じ「密な部分を見つける」作業を、座標という形で人間の目に見せているのです。ただし数千ノードを超えると、どんなレイアウトも「毛玉(hairball)」になり読めません。その規模では可視化を諦め、指標(中心性・モジュラリティ)で定量的に語るべきです。
⚠️ よくある誤解・落とし穴
- レイアウトの座標に意味があると誤解しない:力学モデルの 軸は物理量ではない。距離の遠近は参考程度です。
- 乱数で配置が変わる:力学モデルは初期値依存。再現には seed を固定すること。
- 大規模グラフの可視化は無力:数千ノードで毛玉化する。サンプリング・集約(コミュニティ単位で描く)か、指標による要約に切り替えます。
対応シミュレーション
network-study/simulations/network_layouts.py(上図の生成コード)。
関連
- 前提:グラフの表現・グラフラプラシアンとスペクトル
- レイアウトが映す集団:コミュニティ検出とは
- 上位ハブ:応用と実データ解析 目次