Memo plus Alpha

メモにプラスアルファを加えて価値ある情報に。

matplotlibとnetworkxで日本語を表示する

はじめに

matplotlibとnetworkxはデフォルトでは日本語を表示できず豆腐(□のダミー記号)になります。

f:id:semanticist:20211102174444p:plain

networkxの日本語の文字化け

これを避けるための方法をメモしておきます(ハマって1日が溶けたので…)。

日本語フォントのダウンロード

いくつか手法があるようですが、「日本語のフォントをダウンロード」→「それをmatplotlibに登録」→「描画時に指定」というのが一番簡単でした。

IPA Font ダウンロード | 一般社団法人 文字情報技術促進協議会

上記のサイトからフォントをダウンロードし、ipaexg.ttfをpythonスクリプトと同じフォルダに置きます。その後、以下のコードを実行すればOKなはずです。

import matplotlib
from matplotlib import font_manager
import networkx as nx
import matplotlib.pyplot as plt
 
#ここでフォントを追加しています
font_manager.fontManager.addfont("ipaexg.ttf")
matplotlib.rc('font', family="IPAexGothic")
 
#成功すれば['IPAexGothic']と表示されます
print(matplotlib.rcParams['font.family'])
 
#ここは実験用のグラフです
G = nx.Graph()
G.add_node("あ")
G.add_node("い")
G.add_node("う")
G.add_node("え")
G.add_node("お")
G.add_edges_from([("あ", "お"), ("あ", "い"),  ("え", "い"),  ("え", "う"),  ("あ", "う")])
 
#ここで描画時にフォントを指定します
nx.draw_networkx(G, font_family="IPAexGothic")
plt.show()

f:id:semanticist:20211102174936p:plain

networkxの日本語の文字化け解消

【参考】

【Python】matplotlib3.2の日本語フォント設定方法【公式遵守】 - Qiita