NetworkX
前回、ネットワーク作成ライブラリNetworkXをインストールして、とりあえず表示をしてみました。

今回はNodeの色と大きさ、そしてEdgeの色と太さを変更する方法を試していきます。
まずは基本となるプログラムですが、NodeもEdgeも一つずつ追加しているこの形を使っていきましょう。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, with_labels = True)
実行結果

それでは始めていきましょう。
Nodeの色を一括で変更
まずはNodeの色を一括で変更する方法です。
全てのNodeの色を一括で変更するには「nx.draw」のオプションに「node_color=’色’」を追加します。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, node_color='red', with_labels = True)
実行結果

Edgeの色を一括で変更
次にEdgeの色を一括で変更する方法を見ていきましょう。
Edgeの色を変更する場合も「nx.draw」のオプションに追加しますが、オプションとしては「edge_color=’色’」となります。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, edge_color='red', with_labels = True)
実行結果

Nodeの大きさを一括で変更
次にNodeの大きさを一括で変更する方法です。
Nodeの大きさを一括で変更する場合は、「nx.draw」のオプションに「node_size=サイズ」を追加します。
注意すべき点としては、Nodeのデフォルトのサイズは300ということです。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, node_size=1000, with_labels = True)
実行結果

Edgeの太さを一括で変更
次はEdgeの太さを一括で変更する方法です。
Edgeの太さを一括で変更する場合も「nx.draw」のオプションに追加しますが、この場合は単純に「width=太さ」のオプションを追加します。
(個人的にはedge_widthかと思ったので、ちょっと意外でした)
こちらのデフォルト値は1のようです。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, width=5, with_labels = True)
実行結果

Nodeの色を個別で変更
次にNodeの色を個別に変更する方法です。
特にNodeを分類するなどのときに効果的でしょう。
この場合はNodeの順に合わせた色のリストを作って、「nx.draw」の色のオプション「node_color」に読み込ませます。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
nodecolor = ['Red', 'Green', 'Blue', 'Purple', 'Magenta']
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, node_color = nodecolor, with_labels = True)
実行結果

色々調べていたときに「add_node」のオプションとして「color」を追加している例もあったのですが、何故か私の環境では使えませんでした。
もしかしたらNetworkXのバージョン等で色の指定の仕方が違っていたりするのかもしれません。
import networkx as nx
G = nx.Graph()
G.add_node('A', color='Red')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G,with_labels = True)
実行結果

Edgeの色を個別で変更
次にEdgeの色を個別に変更する方法ですが、こちらもNodeの色を個別に変更する方法と同じく、色のリストを作成し、「nx.draw」の「edge_color」に読み込ませます。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
edgecolor = ['Red', 'Green', 'Blue', 'Purple', 'Magenta']
nx.draw(G, edge_color = edgecolor, with_labels = True)
実行結果

Nodeの大きさを個別で変更
次はNodeの大きさを個別で変更する方法です。
こちらもNodeの色を個別で変更する方法と同じで、大きさのリストを作り、「nx.draw」の「node_size」に読み込ませます。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
nodesize = [300, 600, 900, 1200, 1500]
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
nx.draw(G, node_size = nodesize, with_labels = True)
実行結果

Edgeの太さを個別で変更
次はEdgeの太さを個別に変更する方法です。
こちらも同じく太さのリストを作り、「nx.draw」の「width」のオプションに読み込ませます。
import networkx as nx
G = nx.Graph()
G.add_node('A')
G.add_node('B')
G.add_node('C')
G.add_node('D')
G.add_node('E')
G.add_edge('A', 'B')
G.add_edge('A', 'C')
G.add_edge('A', 'D')
G.add_edge('B', 'D')
G.add_edge('D', 'E')
edgewidth = [1, 2, 3, 4, 5]
nx.draw(G, width = edgewidth, with_labels = True)
実行結果

ということでNodeの色と大きさ、そしてEdgeの色と太さを変更する方法を試してみました。
このように色々変更することでネットワーク図もより見やすく、有用なものになっていくので、是非とも使っていきたいものです。
ただ実は色に関してはもう少し高度な設定の仕方があるので、それは次回試していこうと思います。

ではでは今回はこんな感じで。
コメント