メモ帳

python, juliaで機械学習をやっていく

macの仮想環境化でmatplotlibを簡単に日本語対応させる

以下のように、matplotlibが日本語に対応していないのは有名な問題です。(大量の豆腐が表示されてしまっています。) その、対応として、グローバルにフォントを指定する必要があります。しかし、仮想環境を使っている場合は、それぞれにフォントの設定をしなければいけません。あまりにも手間なので、コード内でフォントを指定する方法を紹介したいと思います。 f:id:atelier-0213:20190626224926p:plain

フォントを取得

まず、以下のフォントをダウンロードします。 4書体パック(Ver.003.03) https://ipafont.ipa.go.jp/old/ipafont/download.html

解凍すると以下の.ttfという拡張子のファイルが得られます。 - ipag.ttf - ipagp.ttf - ipam.ttf - ipamp.ttf

これらを以下のディレクトリに配置して下さい。 ただし、パスは指定できるので、他の場所でも問題ありません。

~/Library/fonts/

日本語の設定

matplotlib.font_managerのFontPropertiesで使用するフォントを指定できます。

from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
import numpy as np

以下のような単語の出現頻度分布をプロットしてみます。

# 単語リスト
word_list = ['の', 'て', 'が', 'に', 'た', 'は', 'で', 'し', 'を', 'と']

# 単語の出現頻度
freq_list = [183320, 165757, 159837, 144889, 131450, 118908, 98824, 86884, 85561, 84181]

プロットをする実際のコードは以下です。 fontpropertiesを指定したラベル、軸の日本語が表示できるようになります。

fp = FontProperties(fname=r'/Library/fonts/ipag.ttf', size=11)
# グラフのパラメータ
plt.title("top10", fontproperties=fp)
plt.xlabel('出現頻度が多い10単語', fontproperties=fp)
plt.ylabel('出現頻度数', fontproperties=fp)

# X軸
x = np.arange(len(word_list))
plt.xticks(x, word_list,fontproperties=fp)
# Y軸
y = np.array(freq_list)

# 棒グラフ
plt.bar(x,y)

#グラフの表示
plt.show()

以下のようなグラフが出力されます。

f:id:atelier-0213:20190626224942p:plain

面倒な設定なしで、日本語が表示されるようになりました! 早く標準対応してほしい。。。