2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

matplotlibを日本語化する代替案

Last updated at Posted at 2025-05-22

結論

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

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であるわけだが、どうも以下のエラーが出て利用できないようであった。

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のときの公式のドキュメントがあった。

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

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

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

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

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

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

解決策:matplotlibのフォント設定を直接変更する

上記のリンクを参照していただければわかるが、japanize-matplotlibのGitレポジトリにあるjapanize-matplotlib.pyを見ると、どうやらmatplotlibにはフォント変更をするモジュールがあるようだ。以下の箇所を見るとわかる。

from matplotlib import font_manager

matplotlibには、font_manageerというものがあり、matplotlibによるグラフ描画の際に利用するフォントを指定することができる。

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

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

結論のコード:

# 必要なモジュールをインポート
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. 必要なモジュールをインポート

from matplotlib import pyplot as plt
from matplotlib import font_manager

pyplotにフォント設定を適用するので、pyplotもインポートする。

2. フォントファイル(tffttc)のパスをfont_pathに格納

例えば、Windowsではmsgothic.ttcというフォントファイルが、一般的にはC:\Windows\Fonts\msgothic.ttcというパスにあるので、

font_path = r"C:\Windows\Fonts\msgothic.ttc"

と指定する。
フォントファイルを別途入手して指定するのもよい。

3. フォントファイルオブジェクトを作成

font_props = font_manager.FontProperties(fname=font_path)

font_pathで指定されたファイルから、フォント情報を持つオブジェクトを生成する。

4. 3で作成したフォントオブジェクトをpyplotに適用する

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というライブラリがあり、これを導入するだけで日本語化できるとのこと。
コマンドプロンプトなどで

pip install matplotlib-fontja

としてパッケージを導入し、使用したいNotebookやPythonスクリプトに

import matplotlib_fontja

を入れるだけで、簡単にmatplolibを日本語化することができる。
以下をご参考に。

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

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?