[Python] matplotlib 可愛いフォントで日本語化

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/b61ad5a1-0bf8-0f15-d604-bc9b35d55ce6.png)

## 概要

- **Python 3.12以降** `japanize_matplotlib` にエラーが発生し動作しない
- 原因を調べて今後 `matplotlib`  を日本語表示できるよう解決策をまとめる
- せっかくなのでかわいい日本語のフォントで表示する (最後におすすめのフリーフォントDLサイト記載)

## 問題点

- `japanize_matplotlib` を `pip install` して利用しようとしたが `distutils` ライブラリが見つからないというエラーが発生した
- `distutils` がPython3.12以降、削除されたので、ファイル内の `japanize_matplotlib` は動作しない

## 対処法

### (1) `matplotlib-fontja` を使う方法

pip install する

```python
pip install matplotlib-fontja
```

import する (この日本語化処理は import するだけで機能する)

```python
import matplotlib_fontja
```

全体のサンプル

```
import matplotlib.pyplot as plt
import matplotlib_fontja

plt.plot([1, 2, 3, 4])
plt.xlabel('簡単なグラフ')
plt.show()
```

![Untitled 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/8afa0782-ff8e-4af9-e32f-74d68c6169d5.png)

### (2) `FontProperties` を使って都度フォントを指定する方法

import に以下を追加

```python
import matplotlib.font_manager as fm
```

`FontProperties` でローカルのフォントを指定 (絶対パス)

```python
jp_font_path = r'C:\WINDOWS\Fonts\msgothic.ttc'
jp_font = fm.FontProperties(fname=jp_font_path)
```

利用時は以下のように `fontproperties` 引数にわたす

```python
plt.xticks(fontproperties=jp_font)
```

全体のサンプル

```python
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm

jp_font_path = r'C:\WINDOWS\Fonts\msgothic.ttc'
jp_font = fm.FontProperties(fname=jp_font_path)

cities = ['東京', '大阪', '名古屋', '福岡', '札幌']
populations = [1400, 880, 750, 510, 195]

x = np.arange(len(cities))
plt.bar(x, populations, tick_label=cities)

plt.title('日本の都市別人口', fontproperties=jp_font)
plt.xlabel('都市', fontproperties=jp_font)
plt.ylabel('人口（万人）', fontproperties=jp_font)
plt.xticks(fontproperties=jp_font)

plt.show()
```

![2024-03-23_23h35_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/b9d90917-8717-9238-6585-313158afdaae.png)

### (3) `plt.rcParams['font.family'] = 'フォント名'` で指定する方法

`plt.rcParams['font.family']` にフォント名を指定する

```python
plt.rcParams['font.family'] = 'MS Gothic'
```

全体のサンプル

```
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'MS Gothic'

plt.plot([1, 2, 3, 4])
plt.xlabel('簡単なグラフ')
plt.show()
```

![Untitled 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/c2c50c32-7d37-86b9-846d-06b36bf3c2fc.png)

## (2) の方法を使用してフォントパスを指定して可愛いフォントでプロットする方法

フォントをダウンロードする

[https://ymnk-design.com/バナナスリップ/](https://ymnk-design.com/%e3%83%90%e3%83%8a%e3%83%8a%e3%82%b9%e3%83%aa%e3%83%83%e3%83%97/)

フォントパスをコピーし、反映する

```python
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.font_manager as fm

jp_font_path = r'C:\Users\yunose\Downloads\YDW_bananaslip_plus\YDW_bananaslip_plus\YDWbananaslipplus.otf'
jp_font = fm.FontProperties(fname=jp_font_path)

cities = ['東京', '大阪', '名古屋', '福岡', '札幌']
populations = [1400, 880, 750, 510, 195]

x = np.arange(len(cities))
plt.bar(x, populations, tick_label=cities)

plt.title('日本の都市別人口', fontproperties=jp_font)
plt.xlabel('都市', fontproperties=jp_font)
plt.ylabel('人口（万人）', fontproperties=jp_font)
plt.xticks(fontproperties=jp_font)

plt.show()
```

![Untitled 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/2b2151c4-189b-552d-3763-0ed3d9be7d97.png)

## 参照元

- [https://teratail.com/questions/ispptkd2y6ai7t](https://teratail.com/questions/ispptkd2y6ai7t)
- [https://ai-inter1.com/matplotlib-japanize/](https://ai-inter1.com/matplotlib-japanize/)
- [https://azusa.shinshu-u.ac.jp/~hasegawa/class/programming/index.php?Python/matplotlibで日本語文字列を使う](https://azusa.shinshu-u.ac.jp/~hasegawa/class/programming/index.php?Python/matplotlib%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E4%BD%BF%E3%81%86)
- [https://github.com/uehara1414/japanize-matplotlib/issues/26](https://github.com/uehara1414/japanize-matplotlib/issues/26)
- [https://github.com/ciffelia/matplotlib-fontja](https://github.com/ciffelia/matplotlib-fontja)

## かわいいフリーフォント DLサイト

- **バナナスリップ** : [https://ymnk-design.com/バナナスリップ/](https://ymnk-design.com/%e3%83%90%e3%83%8a%e3%83%8a%e3%82%b9%e3%83%aa%e3%83%83%e3%83%97/)
- **ニコカv2標準** : [https://nicofont.pupu.jp/nicoca.html#google_vignette](https://nicofont.pupu.jp/nicoca.html#google_vignette)
- **やわらかドラゴン** : [https://ymnk-design.com/やわらかドラゴン/](https://ymnk-design.com/%e3%82%84%e3%82%8f%e3%82%89%e3%81%8b%e3%83%89%e3%83%a9%e3%82%b4%e3%83%b3/)