3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Networkxを使ったグラフの描画(できるだけ詳しく)

Last updated at Posted at 2021-09-19

Networkxを使ってグラフを描画する機会があったので、
その方法をまとめておきます。

以下のコードはGoogle Colaboratoryで動作を確認してます。
おそらくどの端末でも利用可能かと

#モジュールのインポート

今回必要となるモジュールをインポートします。

networkx.py
import networkx as nx #networkxのインポート
from matplotlib import pyplot as plt #matplotlibのインポート

グラフの描画はmatplotlibが必要となります。なので、こちらもインポートをしておきます。

描画するグラフを初期化するときは以下のコードを記述します。
無向グラフと有向グラフが用意されています。

networkx.py
G = nx.DiGraph() #無向グラフの場合、有向グラフは->nx.Digraph()

#ノード(頂点)とエッジ(辺)の追加

グラフのノード(頂点)を追加するときは以下のコードを記述します。

networkx.py
G.add_node(1) #ノードの追加
G.add_node(2)

G.add_nodes_from([3,4]) #リストを使ってノードをまとめて追加することができる

G.nodes(data=False) #出力

次にグラフのエッジ(辺)を追加するときは以下のコードが必要です。

networkx.py
G.add_edge(1,2) #エッジの追加

G.add_edges_from([(1,3),(2,4),(1,4),(3,4)]) #エッジもまとめて追加することができる

G.edges() #出力

#グラフの描画

グラフを描画するときは以下のコードを実行します。

networkx.py
pos = nx.spring_layout(G, seed=0) #ノードの配置を指定

# グラフの描画
plt.figure(figsize=(10,10)) #グラフエリアのサイズ
nx.draw_networkx(G, pos) #グラフの描画(おまかせ)
plt.show() #グラフの描画

##実行結果
Unknown.png

#もっといじりたい!

これでもグラフが作成できるのですが、
もう少しグラフをカスタムしたい場合はこちらを参考してみてください。

networkx.py
# グラフの描画
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()

##実行結果
Unknown-1.png

##もっと×2 いじりたい!
こちらのリファレンスを参考してみてください
https://networkx.org/documentation/stable/reference/generated/networkx.drawing.nx_pylab.draw.html

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?