macの仮想環境化でmatplotlibを簡単に日本語対応させる
以下のように、matplotlibが日本語に対応していないのは有名な問題です。(大量の豆腐が表示されてしまっています。) その、対応として、グローバルにフォントを指定する必要があります。しかし、仮想環境を使っている場合は、それぞれにフォントの設定をしなければいけません。あまりにも手間なので、コード内でフォントを指定する方法を紹介したいと思います。
フォントを取得
まず、以下のフォントをダウンロードします。 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()
以下のようなグラフが出力されます。
面倒な設定なしで、日本語が表示されるようになりました! 早く標準対応してほしい。。。