pythonのNetworkXを使って、グラフをテキストファイルから読み込んで表示する方法を、グラフの種類別にまとめます。
目次
グラフ作成の基になるテキストファイルやソースコードは、 以下にまとめているのでご自由にダウンロードどうぞ。
1. 無向グラフの読み込みと可視化
入力ファイルのフォーマット(重み無し)
読み込ませたいテキストファイルはこちら。
- 上のファイルの各行にはノードを表す番号のペアが記述されます
#
で始まる行はコメント行(デフォルト)- ノードは数字じゃなくてもいける(後述)
ソースコード
# パッケージのインポート import matplotlib.pyplot as plt import networkx as nx # 無向グラフの作成 G = nx.Graph() # ファイルの読み込み G = nx.read_edgelist('graph_data1.txt', nodetype=int) # グラフの描画 pos = nx.spring_layout(G) nx.draw_networkx(G, pos, with_labels=True, alpha=0.5) # 表示 plt.axis("off") plt.show()
結果はこちら
read_edgelist
メソッドの引数
read_edgelist
の使いそうな引数をまとめるとこんな感じ。
引数 | デフォルト | 解説 |
---|---|---|
path | 入力ファイルのパス | |
comments | '#' |
コメント行になる文字の指定 |
delimiter | ' '(スペース) |
区切り文字 |
create_using | networkx.Graph |
グラフのコンテナ |
nodetype | None |
ノードの型、int, float, str等 |
encoding | 'utf-8' |
入力ファイルの文字コード |
補足
- 引数を指定しない場合、デフォルト値が採用される
networkx.Graph
は無向グラフのコンテナ- 例えば、有向グラフとして読み込みたいなら
G = nx.read_edgelist('graph_data1.txt', nodetype=int, create_using=nx.DiGraph)
2. 重み付き無向グラフの読み込みと可視化
入力ファイルのフォーマット(重み付き)
読み込ませたいテキストファイルはこちら。
- 重み無しの入力ファイル をベースに3列に重みが付きます
ソースコード
# パッケージのインポート import matplotlib.pyplot as plt import networkx as nx # 無向グラフの作成 G = nx.Graph() # 重み付きのファイルの読み込み G = nx.read_weighted_edgelist('graph_data2.txt', nodetype=int) # グラフの描画 pos = nx.spring_layout(G) 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) nx.draw_networkx(G, pos, with_labels=True, alpha=0.5) # 表示 plt.axis("off") plt.show()
結果はこちら
read_weighted_edgelist
メソッドを使うことで、重み付きのファイルを読み込みことができる- ここ で紹介した
read_edgelist
メソッドの引数も使える 辺のラベル
に辺の重み
を代入して、辺のラベル
を出力
3. 有向グラフの読み込みと可視化
読み込ませたいテキストファイルはこちら。
- 入力フォーマットは、ここ に書いてある無向グラフと同じもの
# パッケージのインポート import matplotlib.pyplot as plt import networkx as nx # 有向グラフの作成 G = nx.DiGraph() # ファイルの読み込み G = nx.read_edgelist('graph_data3.txt', nodetype=int, create_using=nx.DiGraph) # グラフの描画 pos = nx.spring_layout(G) nx.draw_networkx(G, pos, with_labels=True, alpha=0.5) # 表示 plt.axis("off") plt.show()
networkx.DiGraph
は有向グラフのコンテナread_edgelist
については、ここ 参照
4. 重み付き有向グラフの読み込みと可視化
読み込ませたいテキストファイルはこちら。
- 入力フォーマットは、ここ に書いてある無向グラフ場合と同じ
# パッケージのインポート import matplotlib.pyplot as plt import networkx as nx # 有向グラフの作成 G = nx.DiGraph() # 重み付きのファイルの読み込み G = nx.read_weighted_edgelist('graph_data4.txt', nodetype=int, create_using=nx.DiGraph) # グラフの描画 pos = nx.spring_layout(G) 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) nx.draw_networkx(G, pos, with_labels=True, alpha=0.5) # 表示 plt.axis("off") plt.show()
結果はこちら
read_weighted_edgelist
メソッドを使うことで、重み付きのファイルを読み込みことができる- ここ で紹介した
read_edgelist
メソッドの引数も使える 辺のラベル
に辺の重み
を代入して、辺のラベル
を出力
うまくまとめることができたんじゃないでしょうか。。