【日本語対応】NetworkX(V2)の使い方!最も行数が少ないPythonサンプル

日本語に対応した、NetworkX(v2.4)とpythonを使って、

簡単なネットワーク図を描画するための実装方法を紹介します。

 

概要

実装環境

実装時の環境は以下のとおりです。

  • Python 3.6.8
  • NetworkX 2.4

 

実装上のポイント

実装上のポイントを記載します。

  1. FontPropertiesなど使って日本語のフォントを指定しないと文字化けする
  2. NetworkX V2の仕様なのかフォントを設定するset_fontproperties関数が使えなくなっている
  3. 日本語を表示するには、ラベルの設定が必要

 

筆者は、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を使ってネットワーク図を描画を実現する方法でした。

入会するか悩むのは無料カウンセリング後で十分間に合います!無料カウンセリングは、スクール名のリンクから申し込みできます。

>>より詳しく5つのスクールについて知りたい方は、以下をクリック!

 

 

最新情報をチェックしよう!