matplotlibを日本語化する代替案

# 結論
以下のコードをJupyter Notebook上で実行すれば、matplotlibによるグラフ描画が日本語でできるようになる。
なお、通常のPythonファイル(`.py`)でも利用できる。
```python
from matplotlib import pyplot as plt
from matplotlib import font_manager

# 日本語に対応したファイルのパスを指定する
font_path = r"C:\Windows\Fonts\msgothic.ttc"

font_props = font_manager.FontProperties(fname=font_path)
plt.rcParams["font.family"] = font_prop.get_name()
```
(Windowsでの実行を想定。ほかのOSであったり、異なるフォントを利用したい場合は、`font_path`で別のファイルパスを指定すればよい。)

# Python / Jupyter Notebookでjapanize-matplotlibが使えない？
PythonおよびJupyter Notebookでmatplotlibを利用してグラフを描画するとき、日本語がグラフのラベルや項目名に入っていると、文字化けしてしまう。
そんな問題を解決してくれるのが**japanize-matplotlib**であるわけだが、どうも以下のエラーが出て利用できないようであった。
```python
import japanize_matplotlib
# >> ModuleNotFoundError: No module named 'distutils'
```
実行環境は、
+ Python ->3.12.3
+ matplotlib -> 3.10.3
+ japanize-matplotlib -> 1.1.3

である。
「`distutils`というモジュールはありませんよーー」というエラーが出た。
使用しているPythonのバージョンは**3.12.3**である。
おそらく**japanize_matplotlib**が内部的に利用しているモジュールであろうが、調べてみることにした。
## **distutils**とは？
**distutils**というのは、簡単にいうと元々Pythonのライブラリのビルドやパッケージ化、インストールに使われていたモジュールである。
以下にPython 3.9のときの公式のドキュメントがあった。

https://docs.python.org/3.9/library/distutils.html#module-distutils

なお、このモジュールは非推奨となり、Python 3.10で廃止（Deprecated）され、Python 3.12から完全に削除された。

https://docs.python.org/3/library/distutils.html

代替として、**setuptools**が使われるようになった。
**setuptools**については、ここでは割愛する。

**japanize-matplotlib**が`distutils`モジュールを利用していることは、Gitのレポジトリを参照すればわかる。

https://github.com/uehara1414/japanize-matplotlib/blob/master/japanize_matplotlib/japanize_matplotlib.py

コードの中身を見てみると、matplotlibのバージョンに応じて、フォント適用の方法を分けているのがわかる。

その処理自体は問題ないが、問題点は、バージョン比較に`distutils.version.LooseVersion`を利用していることである。
ここが原因で、`distutils`モジュールが削除された環境でjapanize-matplotlibが結果として利用できないといった次第である。

japanize-matplotlibをインストールして、パッケージインストール先にある`japanize-matplotlib.py`を直接変更してしまうのもよいが、上級者向けであまりお勧めはしない。

# 解決策：matplotlibのフォント設定を直接変更する
上記のリンクを参照していただければわかるが、japanize-matplotlibのGitレポジトリにある`japanize-matplotlib.py`を見ると、どうやらmatplotlibにはフォント変更をするモジュールがあるようだ。以下の箇所を見るとわかる。
```python
from matplotlib import font_manager
```
matplotlibには、`font_manageer`というものがあり、matplotlibによるグラフ描画の際に利用するフォントを指定することができる。

ここに公式の説明がある。

https://matplotlib.org/stable/users/explain/text/fonts.html

結論として、matplotlibのフォントを日本語対応のものに指定すれば、それでmatplotlibを日本語化することができる。

結論のコード：
```python
# 必要なモジュールをインポート
from matplotlib import pyplot as plt
from matplotlib import font_manager

# 日本語に対応したファイルのパスを指定する
font_path = "（フォントファイルのあるパス）" # <- 以下に例を掲載

font_props = font_manager.FontProperties(fname=font_path)
plt.rcParams["font.family"] = font_prop.get_name()
```

以下、コードの処理を順番に解説していく。

## 手順

### 1. 必要なモジュールをインポート
```python
from matplotlib import pyplot as plt
from matplotlib import font_manager
```
pyplotにフォント設定を適用するので、pyplotもインポートする。

### 2. フォントファイル（`tff`や`ttc`）のパスを`font_path`に格納
例えば、Windowsでは`msgothic.ttc`というフォントファイルが、一般的には`C:\Windows\Fonts\msgothic.ttc`というパスにあるので、
```python
font_path = r"C:\Windows\Fonts\msgothic.ttc"
```
と指定する。
フォントファイルを別途入手して指定するのもよい。

### 3. フォントファイルオブジェクトを作成
```python
font_props = font_manager.FontProperties(fname=font_path)
```
`font_path`で指定されたファイルから、フォント情報を持つオブジェクトを生成する。

### 4. 3で作成したフォントオブジェクトをpyplotに適用する
```python
plt.rcParams["font.family"] = font_props.get_name()
```
`rcParams`とは、matplotlibのグローバル設定を格納している`dict`型のオブジェクトで、そのうち`font.family`にフォント名を指定すればよい。
なお、`font_props`はフォントオブジェクトであるが、このオブジェクトにはフォント名を取得できる`get_name()`メソッドがあるため、これでフォント名を指定しているといった具合である。

# 最後に
japanize-matplotlibが使えなくなったとき、まったく解決策が思い浮かばず、路頭に迷っていた。しかし、意外にも簡単に解決できたので、ここで共有しておく。

なお、現在（2025/05/22）のところ、PyPlに`matplotlib_fontja`というライブラリがあり、これを導入するだけで日本語化できるとのこと。
コマンドプロンプトなどで
```powershell
pip install matplotlib-fontja
```
としてパッケージを導入し、使用したいNotebookやPythonスクリプトに
```python
import matplotlib_fontja
```
を入れるだけで、簡単にmatplolibを日本語化することができる。
以下をご参考に。

https://pypi.org/project/matplotlib-fontja/

ただし、導入が面倒であれば、以上のような手動による方法を試してみるとよいだろう。


最後まで読んでいただき、ありがとうございました。まだまだ知識は浅い方なので、疑問や問題点などありましたらコメント欄でお願いします。