matplotlibとnetworkxで日本語を表示する
はじめに
matplotlibと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()
【参考】
【Python】matplotlib3.2の日本語フォント設定方法【公式遵守】 - Qiita