20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PythonライブラリのmatplotlibとNetworkXの日本語文字化け解消

Last updated at Posted at 2016-02-08

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

スクリーンショット 2016-02-08 18.24.33.png
こんな感じで日本語部分が文字化けします。

これは、.matplotlib/matplotlibrcファイルに日本語フォントを指定すれば解消しました。

~/.matplotlib/matplotlibrc
font.family :Hiragino Kaku Gothic Pro
backend : TkAgg

ヒラギノ角ゴを指定した例

スクリーンショット 2016-02-08 18.23.32.png

一方NetworkXでは

NetworkXではdraw_networkx_labelsでノードにテキストを表示できますが、matplotlibにフォント指定しても文字化けしたままです。

スクリーンショット 2016-02-08 18.13.08.png

これは、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

スクリーンショット 2016-02-08 18.10.21.png

##追記

  • 手元の別のMacだとfont_family='Hiragino Kaku Gothic Pro'だと文字化けしたままで、font_family='Osaka'だと日本語出力できました。
  • 'Hiragino Kaku Gothic Pro'より'Hiragino Kaku Gothic ProN'の方がいいかも
20
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?