matplotlibで日本語フォントを使うのに盛大につまづいた話について記します。
Pythonでmatplotlibを使ってグラフを描画するとき、 日本語フォントが使えず、文字化けしてしまいます。
日本語フォントを使うための設定でつまづいたので、解決策をメモしておきます。
結論
以下のQiitaの記事を読んで解決しました。
環境変数を指定するとよいそうです。
私の環境だと、日本語フォント(IPAexゴシック)をダウンロードしたあと、 Pythonのコードに以下のような記述をします。
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
fp = FontProperties(
fname="/home/[ユーザ名]/.local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf"
)
# 中略
plt.legend(prop=fp) # 凡例
plt.title("日本語のタイトル", fontproperties=fp) # タイトル
plt.savefig("ファイル名")
フォントのダウンロードは、linuxのコマンドで以下のような流れでしました。
cd ~/.local/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/
wget https://ipafont.ipa.go.jp/IPAexfont/ipaexg00301.zip
sudo apt-get install unzip
unzip ipaexg00301.zip
cp ipaexg00301/ipaexg.ttf .
これらの方法は、matplotlibのインストール先によって適宜読み替える必要があります。
matplotlibのインストール先(参照している設定ファイルの場所)は、以下のメソッドで確認できます。
import matplotlib
matplotlib.matplotlib_fname()
使用環境
- Windows10 Bash on Windows
- Python 3.5
anacondaのような仮想環境は使わず、matplotlibなどのモジュールは直接
pip install
しています。
その他試してうまくいかなかったこと
フォントキャッシュを消す
ググると大抵の場合で、「フォントキャッシュを消す」ことが解決策として提示されていました。
例えば、以下の記事など。
私の環境だとフォントキャッシュのファイルがそもそも見つからなかったので、試すことができませんでした。
seaborn依存の設定
matplotlibと一緒にseabornを使用していたのですが、以下の記事に書いてあることを試したところ、解決しませんでした。
結果、私の環境では、seaborn特有の設定は必要なさそうでした。
今後同じような問題が起きる可能性はあるので、一応メモしておきます。
再起動
初心に返り、bashを再起動したりもしましたが、解決しませんでした。
PC自体の再起動は試していません。
まとめ
matplotlibでグラフを書く際、日本語フォントを使うことができました。
調べるのに1~2時間かかりました…。疲れた…。
なお、描きたかったのは、我が子の授乳表(授乳とミルクのタイミングメモ)です。
日本語でタイトルと凡例が書けました。めでたしめでたし。