【Python基礎】NetworkXでネットワーク図作成:Nodeの色、大きさ、そしてEdgeの色、太さの変更

  • URLをコピーしました!
目次

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の色と太さを変更する方法を試してみました。

このように色々変更することでネットワーク図もより見やすく、有用なものになっていくので、是非とも使っていきたいものです。

ただ実は色に関してはもう少し高度な設定の仕方があるので、それは次回試していこうと思います。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次