pyenv-virtualenvで作った環境でmatplotlibとNetworkXが文字化け
前回、Macにpyenv-virtualenvを使ってPython環境を作りましたが、その時いれたmatplotlibとNetworkXで日本語文字が文字化けしている状態になっていました。
どちらも有名なライブラリなので、普通にインストールしていたら特にはまらない箇所だと思うのですが、手元の環境では文字化けします。解消方法を探してみました。
matplotlibで日本語を表示する
サンプルコード
matplotlib-utf8.py
import matplotlib.pyplot as plt
plt.text(0.2, 0.2, "日本語", fontsize=50)
plt.show()
このコードを実行すると
python matplotlib-utf8.py
これは、.matplotlib/matplotlibrcファイルに日本語フォントを指定すれば解消しました。
~/.matplotlib/matplotlibrc
font.family :Hiragino Kaku Gothic Pro
backend : TkAgg
ヒラギノ角ゴを指定した例
一方NetworkXでは
NetworkXではdraw_networkx_labelsでノードにテキストを表示できますが、matplotlibにフォント指定しても文字化けしたままです。
これは、draw_networkx_labelsのfont_familyパラメータに、ヒラギノ角ゴ等の日本語フォントを指定すると解消しました。
networkx-label.py
import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
G.add_edge(0,1)
G.add_edge(1,2)
G.add_edge(2,0)
G.add_edge(0,3)
pos=nx.spring_layout(G)
nx.draw_networkx_edges(G,pos,width=1.0,alpha=0.5)
labels={0:"零",1:"初",2:"弐",3:"参"}
nx.draw_networkx_labels(G,pos,labels,font_size=16,font_family='Hiragino Kaku Gothic Pro')
plt.show()
実行するとNetworkXでも日本語で表示できました。
python networkx-label.py
##追記
- 手元の別のMacだとfont_family='Hiragino Kaku Gothic Pro'だと文字化けしたままで、font_family='Osaka'だと日本語出力できました。
- 'Hiragino Kaku Gothic Pro'より'Hiragino Kaku Gothic ProN'の方がいいかも