【日本語対応】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を使ってネットワーク図を描画を実現する方法でした。

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR