日本語に対応した、NetworkX(v2.4)とpythonを使って、
簡単なネットワーク図を描画するための実装方法を紹介します。
概要
実装環境
実装時の環境は以下のとおりです。
- Python 3.6.8
- NetworkX 2.4
実装上のポイント
実装上のポイントを記載します。
- FontPropertiesなど使って日本語のフォントを指定しないと文字化けする
- NetworkX V2の仕様なのかフォントを設定するset_fontproperties関数が使えなくなっている
- 日本語を表示するには、ラベルの設定が必要
筆者は、set_fontproperties関数を使って日本語を設定しようとしたら、以下のような
エラーが出て対処に苦労しました。
「module ‘networkx’ has no attribute ‘set_fontproperties’」
対処方法は、次の実装例で記載します。
NetworkXを使った実装例
NetworkXを使った実装例を紹介します。
#!/usr/bin/env python
# coding: utf-8
import matplotlib.pyplot as plt
import networkx as nx
import matplotlib.font_manager #日本語
#日本語フォント読み込み
font_path = r'/Users/develop/python/kaggle/Osaka.ttf'
font_prop = matplotlib.font_manager.FontProperties(fname=font_path)
#!!!2020年時点では、set_fontproperties使ってフォントを設定できなくなっているので注意!
#nx.set_fontproperties(font_prop)
#network初期化
G=nx.Graph()
#エッジを追加する(日本語で設定すると文字化けするので、後処理で、ラベルとして数値と日本語を紐付ける)
G.add_edge(0,1)
G.add_edge(1,2)
G.add_edge(2,0)
G.add_edge(0,3)
G.add_edge(3,4)
pos=nx.spring_layout(G)
#ここでnetworkを描画する
#描画した後でないと、ラベルを設定できない。
nx.draw(G,pos,node_color='#A0CBE2',width=1,edge_cmap=plt.cm.Blues,with_labels=False)
#ラベルの設置をする
labels={0:"零",1:"ー",2:"二",3:"三",4:"四"}
datas = nx.draw_networkx_labels(G,pos,labels,font_size=16)
#日本語に対応できるようにするため、日本語が使えるフォントを設定している
for t in datas.values():
t.set_fontproperties(font_prop)
#折角なので先の太さが違うものでも描画してみる
G=nx.Graph()
G.add_edge(1,2)
nx.draw(G,pos,node_color='#A0CB00',width=10,edge_cmap=plt.cm.Blues,with_labels=False)
#nx.draw_networkx_nodes(G, pos, alpha=0.6, node_shape="o",width=30,
# node_color='green',
# node_size=2000)
plt.show()
その結果、以下のようなネットワーク図を出すことができました。
簡単な図であれば、比較的楽に実装できることがわかったかと思います。
NetworkXの応用例として、共起語のネットワークなどあります。
いろいろ試していると面白いかしれません。
まとめ
以上、NetworkXを使ってネットワーク図を描画を実現する方法でした。
- 👑👑Aidemy Premium Plan・AIを基礎から学ぶPython特化型プログラミングスクール
受講期間中ならAI、WEB開発、データサイエンスなどの多くの技術を身につけられる!
開発環境がすでに用意されているから、すぐに学習に取り組める! - テックアカデミー・最短4週間から学べるスクール
週2回のメンタリングでモチベーションを持続できる
受講料が10万円台からとお財布に優しい! - 侍エンジニア・専属メンターと二人三脚でオリジナルサービス開発を実現
オリジナルカリキュラムであなたの目的にあった技術を学べる!
あなた専属のメンターが、入学から卒業まで学習をサポート
入会するか悩むのは無料カウンセリング後で十分間に合います!無料カウンセリングは、スクール名のリンクから申し込みできます。
>>より詳しく5つのスクールについて知りたい方は、以下をクリック!