Tutorialに学ぶNetworkXの使い方②|Pythonによる可視化入門 #14

f:id:lib-arts:20191228172252p:plain

#1〜#4まではMatplotlibに関して、#5〜#8まではseabornについて、#9〜#12ではPillowについてまとめました。

Matplotlibの使い方①(plt.plot、plt.scatter、plt.hist)|Pythonによる可視化入門 #1 - lib-arts’s diary

Tutorialに学ぶseabornの使い方①(概要&Visualizing statistical relationships)|Pythonによる可視化入門 #5 - lib-arts’s diary

Tutorialに学ぶPillowの使い方①(Visualizing linear relationships)|Pythonによる可視化入門 #9 - lib-arts’s diary

#13からはPython環境でグラフ(グラフ理論のグラフで、ノードとエッジから構成されます)を描画するツールである、NetworkXについて取り扱います。

Tutorial — NetworkX 2.4 documentation

#13ではNetworkXの概要と、チュートリアルの"Drawing graphs"よりグラフの描画について取り扱いました。

#14ではチュートリアルより、"Creating a graph""、"Nodes"、"Edges"について取り扱います。
以下、目次になります。
1. Creating a graphとNodesについて
2. Edgesについて
3. まとめ

 

1. Creating a graphとNodesについて

f:id:lib-arts:20200105165248p:plain

Tutorial — NetworkX 2.4 documentation

Creating a graphの冒頭部の説明ではNodeとEdgeのないグラフを作成すると記述されています。

f:id:lib-arts:20200105165313p:plain

Tutorial — NetworkX 2.4 documentation

また、Nodesではグラフへのノードの追加を取り扱っているとされています。説明が長いとわかりにくくなるので、早速コードを動かしてみます。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node(1)
G.add_nodes_from([2, 3])
nx.draw(G, with_labels=True)

plt.show(G)

上記の実行結果は下記のようになります。

f:id:lib-arts:20200105174234p:plain

1,2,3の三つのノード(点)が、描画されていることが確認できます。ここでnx.drawでmatplotlibの機能を用いて描画を行なっていますが、オプションのwith_labelsをTrueにすることで、ノードにIndexを付加することができています。
ここまででノードの追加に関しては確認できたのですが、他の書き方も可能のためもう一つ書き方をご紹介します。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
H = nx.path_graph(10)
G.add_nodes_from(H)
nx.draw(G, with_labels=True)

plt.show(G)

上記を実行することで、下記のグラフを確認することができます。

f:id:lib-arts:20200105203708p:plain

ノードの追加についての機能のだいたいのイメージがつけば一旦は十分だと思われます。

 

2. Edgesについて
2節ではEdgesについて取り扱います。早速コードを動かしてみます。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from([(1, 2), (1, 3)])
nx.draw(G, with_labels=True)

plt.show(G)

上記の実行結果は下記のようになります。

f:id:lib-arts:20200105204110p:plain

1と2、2と3を結ぶエッジを追加したので、それに対応する図が描画されていることが確認できます。
また、この時注意なのが、エッジの追加だけでも対応するノードの追加はされますが、エッジを持たないノードも存在する場合があるので、ノードの追加の機能も必要だということです。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_edges_from([(0, 1), (1, 2)])
nx.draw(G, with_labels=True)

plt.show(G) 

上記の実行結果は下記のようになります。

f:id:lib-arts:20200105204737p:plain

この時、0と1、1と2はエッジの追加の際にも追加されますが、3〜9のノードは別途追加していることで描画される形になっています。大枠について確認できたので2節はここまでとします。


3. まとめ
#14ではNetworkXのチュートリアルより、"Creating a graph"〜"Edges"を取り扱いました。
#15では同じくチュートリアルより、"What to use as nodes and edges"以降を取り扱っていきます。