pythonパッケージであるNetworkXで、グラフのノードとエッジに色を設定する方法を紹介します。
目次
NetworkXでノードとエッジに色を設定するpythonコード
いろいろ説明する前に、実際に色を設定するpythonコードを紹介します。
pythonとパッケージのバージョンはこちら:
- python 3. 7. 2
- networkx 2. 4
- matplotlib 3. 3. 0
実行結果はこちら:
では、ノードとエッジ、それぞれ色の設定方法を解説していきます。
ノードの色の設定方法
上のコードを部分的に解説していきます。
# ノードを追加 G.add_nodes_from([ (0, {"color" : "darkorange"}), (1, {"color" : "lightblue"}), (2, {"color" : "lightblue"}), (3, {"color" : "lightblue"}), (4, {"color" : "royalblue"}), (5, {"color" : "royalblue"}), (6, {"color" : "royalblue"}), (7, {"color" : "steelblue"}), (8, {"color" : "steelblue"}), (9, {"color" : "steelblue"}) ])
このコードでは、G = nx.Digraph()
で定義された有向グラフにノードを追加していて、darkorange
lightblue
royalblue
steelblue
という色を設定しています。設定できる色の一覧はこの記事の最後で紹介します。
add_nodes_from()
: グラフにノードを追加- 引数はlist型
- listの各要素はtuple型で
(ノード番号, dict型のノード属性)
このようにグラフにノードを追加することで、ノードにcolor
という色を表す属性を設定することができます。
次に、グラフをmatplotlibで出力するために、ノードの色設定をnode_color
に取得します。
# ノードの色をセット node_color = [node["color"] for node in G.nodes.values()]
最後に、draw_networkx
関数でグラフを出力するときに node_color
を引数に与えれば、ノードの色の設定は完了です。
nx.draw_networkx(G, pos, edge_color=edge_color, node_color=node_color)
エッジの色の設定方法
ノードのとき同じように、上で紹介したコードを部分的に解説していきます。
# エッジの追加(方法1) edges = [ (0, 1, {"color" : "lightblue"}), (1, 2, {"color" : "lightblue"}), (2, 3, {"color" : "lightblue"}), (3, 0, {"color" : "lightblue"}) ] G.add_edges_from(edges) # エッジの追加(方法2) nx.add_path(G, [0,4,5,6,0], color="royalblue") nx.add_path(G, [0,7,8,9,0], color="steelblue")
ここでは、G = nx.Digraph()
で定義された有向グラフにエッジを追加していて、 lightblue
royalblue
steelblue
という色を設定しています。
add_edges_from
関数でエッジを追加- 引数はlist型で、listの各要素は tuple 型:
(始点, 終点, dict型のエッジ属性)
- 引数はlist型で、listの各要素は tuple 型:
add_path
関数でパスに含まれるエッジを追加color
で色を指定すると、パスに含まれる全てのエッジに適用される
ノードのときと同じように、エッジにcolor
という色を表す属性を設定することができます。そして、エッジの色設定をedge_color
に取得し、draw_networkx
関数きに edge_color
を引数に与えれば、エッジの色の設定は完了です。
# エッジの色をセット edge_color = [edge["color"] for edge in G.edges.values()] # 中略 # グラフを出力 nx.draw_networkx(G, pos, edge_color=edge_color, node_color=node_color)
さらに詳しい解説は、NetworkXの公式ドキュメントを参照ください:
Software for Complex Networks — NetworkX 2.6.2 documentation
NetworkXで設定できる色の一覧
上のpythonコードでは matplotlib を使っていますので、NetworkXで設定できる色は matplotlib と同じです。設定できる色と名前の一覧はこちらです:
画像はmatplotlib の公式サイトから引用しています: