Networkxを使ってグラフを描画する機会があったので、
その方法をまとめておきます。
以下のコードはGoogle Colaboratoryで動作を確認してます。
おそらくどの端末でも利用可能かと
#モジュールのインポート
今回必要となるモジュールをインポートします。
import networkx as nx #networkxのインポート
from matplotlib import pyplot as plt #matplotlibのインポート
グラフの描画はmatplotlibが必要となります。なので、こちらもインポートをしておきます。
描画するグラフを初期化するときは以下のコードを記述します。
無向グラフと有向グラフが用意されています。
G = nx.DiGraph() #無向グラフの場合、有向グラフは->nx.Digraph()
#ノード(頂点)とエッジ(辺)の追加
グラフのノード(頂点)を追加するときは以下のコードを記述します。
G.add_node(1) #ノードの追加
G.add_node(2)
G.add_nodes_from([3,4]) #リストを使ってノードをまとめて追加することができる
G.nodes(data=False) #出力
次にグラフのエッジ(辺)を追加するときは以下のコードが必要です。
G.add_edge(1,2) #エッジの追加
G.add_edges_from([(1,3),(2,4),(1,4),(3,4)]) #エッジもまとめて追加することができる
G.edges() #出力
#グラフの描画
グラフを描画するときは以下のコードを実行します。
pos = nx.spring_layout(G, seed=0) #ノードの配置を指定
# グラフの描画
plt.figure(figsize=(10,10)) #グラフエリアのサイズ
nx.draw_networkx(G, pos) #グラフの描画(おまかせ)
plt.show() #グラフの描画
#もっといじりたい!
これでもグラフが作成できるのですが、
もう少しグラフをカスタムしたい場合はこちらを参考してみてください。
# グラフの描画
plt.figure(figsize=(10,10))
"""
node_size: ノードの大きさを指定(デフォルト:300)
node_color: ノードの色を指定(デフォルト:#1f78b4)
node_shape: ノードの形を指定(デフォルト:'o')
*ノードの形についてはmatplotlib.markersクラスで定義されているマーカー
alpha: ノードの透明度を指定(デフォルト:None)
linewidths: ノードの枠線の太さを指定(デフォルト:1.0)
edgecolors: ノードの枠線の色を指定(デフォルト:node_color)
"""
nx.draw_networkx_nodes(G, pos, node_size=1300, node_color='#87cefa', node_shape='D',
alpha=0.7, linewidths=2.0, edgecolors="#0000ff")
"""
width: エッジの太さを指定(デフォルト:1.0)
edge_color: エッジの色を指定(デフォルト:#1f78b4)
style: 線のスタイルを指定(デフォルト:solid line)
alpha: エッジの透明度を指定(デフォルト:None)
arrowstyle: 矢印の形を指定(デフォルト:- or ->)
"""
nx.draw_networkx_edges(G, pos, width=1.5, edge_color='#aaaaaa', style='-.', alpha=0.7, arrowstyle='->')
"""
font_size: 文字サイズの指定(デフォルト:12)
font_color: エッジの色を指定(デフォルト:k)
font_family: 文字フォントの指定(デフォルト:sans-serif)
font_weight: 文字の修飾(デフォルト:normal)
"""
nx.draw_networkx_labels(G, pos, font_size=20, font_color='#0000ff',
font_family='sans-serif', font_weight='bold', alpha=None)
plt.show()
##もっと×2 いじりたい!
こちらのリファレンスを参考してみてください
https://networkx.org/documentation/stable/reference/generated/networkx.drawing.nx_pylab.draw.html