[Python] Ubuntuでmatplotlibの日本語化

# はじめに
Pythonでクローリングとスクレイピングを勉強しているのだが、本の途中で出てきたmatplotlibの日本語化がスムーズにできなかったのでまとめておきます

# 環境
Windows10上のvirtualboxでUbuntuの仮想環境
Ubuntu 18.04.4 LTS

# 経緯
 - matplotlibのインストール

環境によってことなるので注意してください
コマンドで以下を実行

```terminal
pip install matplotlib
```

 - 日本語フォントをUbuntuにインストール

```terminal
sudo apt install -y fonts-migmix #Ubuntuの場合
```

 - 日本語をラベル名にして図を描画

```python:japanese_label.py
import matplotlib
matplotlib.use("Agg")

import matplotlib.pyplot as plt

plt.plot([1,2,3,4,5],[1,2,3,4,5], "bx-", label="1次関数")
plt.plot([1,2,3,4,5],[1,4,9,16,25],"ro--", label="2次関数")

plt.xlabel("xの値")
plt.ylabel("yの値")

plt.legend(loc="best")
plt.xlim(0, 6)
plt.savefig("japanese_label.png", dpi=300)

```

(参考文献)[Pythonクローリング＆スクレイピング ―データ収集・解析のための実践開発ガイド―](https://www.amazon.co.jp/Python%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0-%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0-%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%8E%E9%9B%86%E3%83%BB%E8%A7%A3%E6%9E%90%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5%E9%96%8B%E7%99%BA%E3%82%AC%E3%82%A4%E3%83%89-%E5%8A%A0%E8%97%A4-%E8%80%95%E5%A4%AA/dp/4774183679/ref=tmm_other_meta_binding_title_0?_encoding=UTF8&qid=&sr=)

このようにすると図がカレントディレクトリに保存されますが以下のように日本語部分が□で表示されてしまいます
![japanese_label.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601868/174eeaaf-f254-c281-e33b-7d402c9fcdbf.png)

これを解消したい

#解決方法
こちらの記事を参考にしました
[matplotlibで日本語を描画 on Ubuntu](https://qiita.com/conta_/items/4b031a44acceb137ec73)

 - インストールした日本語フォントの在処を確認

```terminal
fc-list | grep migmix

/usr/share/fonts/truetype/migmix/migmix-2m-bold.ttf: MigMix 2M:style=Bold
/usr/share/fonts/truetype/migmix/migmix-2p-bold.ttf: MigMix 2P:style=Bold
/usr/share/fonts/truetype/migmix/migu-1m-regular.ttf: Migu 1M:style=Regular
/usr/share/fonts/truetype/migmix/migu-2m-regular.ttf: Migu 2M:style=Regular
/usr/share/fonts/truetype/migmix/migu-1c-regular.ttf: Migu 1C:style=Regular
/usr/share/fonts/truetype/migmix/migu-1p-regular.ttf: Migu 1P:style=Regular
/usr/share/fonts/truetype/migmix/migmix-1p-bold.ttf: MigMix 1P:style=Bold
/usr/share/fonts/truetype/migmix/migmix-2m-regular.ttf: MigMix 2M:style=Regular
/usr/share/fonts/truetype/migmix/migmix-1m-regular.ttf: MigMix 1M:style=Regular
/usr/share/fonts/truetype/migmix/migmix-1p-regular.ttf: MigMix 1P:style=Regular
/usr/share/fonts/truetype/migmix/migmix-2p-regular.ttf: MigMix 2P:style=Regular
/usr/share/fonts/truetype/migmix/migu-2m-bold.ttf: Migu 2M:style=Bold
/usr/share/fonts/truetype/migmix/migu-1p-bold.ttf: Migu 1P:style=Bold
/usr/share/fonts/truetype/migmix/migu-1c-bold.ttf: Migu 1C:style=Bold
/usr/share/fonts/truetype/migmix/migu-1m-bold.ttf: Migu 1M:style=Bold
/usr/share/fonts/truetype/migmix/migmix-1m-bold.ttf: MigMix 1M:style=Bold
```

フォントはインストールされているようですね。ではこれらのうち使いたいフォントのパスを確認してください。

 - matplotlibでフォントを使えるようにする

```python:japanese_label.py
import matplotlib
matplotlib.use("Agg")

# 先ほどのコードに以下4行を追加
from matplotlib.font_manager import FontProperties
font_path = "/usr/share/fonts/truetype/migmix/migmix-1p-regular.ttf"
font_prop = FontProperties(fname=font_path)
matplotlib.rcParams["font.family"] = font_prop.get_name()

import matplotlib.pyplot as plt

plt.plot([1,2,3,4,5],[1,2,3,4,5], "bx-", label="1次関数")
plt.plot([1,2,3,4,5],[1,4,9,16,25],"ro--", label="2次関数")

plt.xlabel("xの値")
plt.ylabel("yの値")

plt.legend(loc="best")
plt.xlim(0, 6)
plt.savefig("japanese_label.png", dpi=300)

```

保存した図
![japanese_label.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601868/42df0a44-17f2-5268-b900-718f35c6153a.png)

日本語が表示されていますね

# これでもできないとき
matplotlibが自動で作る(?)キャッシュファイルが原因の場合があります。私もここでつまずきました。matplotlibのキャッシュファイルは`~/.cache/matplotlib`にありました。

以下のコマンドを実行して中身を確認してキャッシュファイルと思われるものを削除してください
```terminal
ls ~/.cache/matplotlib/
```

私の場合は`rm ~/.cache/matplotlib/tex.cache`でキャッシュファイルを削除できました。

#最後に
キャッシュファイルのせいで思ったように動かないのはあるあるらしいですね。覚えておきます。
ちなみに初投稿でした。読んでいただきありがとうございます。