「豆腐」があるのがわかりますか?
次の画像には、3丁の豆腐がありますね。
Matplotlibで日本語を表示しようとした場合、大抵の人が見る光景です。
日本語が文字化けして、上のような表示となります。
この記事では、Matplotlibにおける日本語の文字化けを解消する方法を解説していきます。
本記事の内容
- Matplotlib日本語化の検証環境
- Matplotlibにおける日本語の文字化け
- IPAexGothicのインストール
- Matplotlibの設定ファイル(matplotlibrc)を変更する
- 日本語の文字化け解消を確認する
それでは、上記に沿って解説していきます。
Matplotlib日本語化の検証環境
OSは、Ubuntuのバージョン18.04です。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.5 LTS"
Windowsの場合は、次の記事をご覧ください。
OSの確認ができたので、まずは現状確認から始めましょう。
Matplotlibにおける日本語の文字化け
冒頭で示したのは、次の画像の一部です。
一部とは、タイトル部分のことですね。
そして、上の画像を作成したコードは以下となります。
「日本語」の部分が、豆腐となって文字化けしています。
import matplotlib.pyplot as plt plt.title("日本語title") plt.savefig('japanese.png')
上記を実行した際、同じスクリプトファイルと同じディレクトリに画像が作成されます。
「japanse.png」というファイル名です。
もし、下記のエラーが出るならMatplotlibが適切にインストールされていません。
ModuleNotFoundError: No module named 'matplotlib'
Matplotlibがインストールされていない場合は、PIPでインストールしましょう。
ただし、事前に次のコマンドでPIP自体を更新しておいてください。
python -m pip install --upgrade pip
Matplotlibのインストールは、以下のコマンドとなります。
pip install matplotlib
以上、Matplotlibにおける日本語の文字化けに関しての確認です。
それでは、この文字化けを解消していきます。
IPAexGothicのインストール
文字化けを解消するためには、日本語のフォントが必要です。
ただ、Ubuntuには、デフォルトでIPAフォントから派生した「Takaoフォント」がインストールされています。
それを使うという手もありますが、一般に普及しているIPAexGothicを使うことにします。
IPAexGothicは、IPAexゴシックのことです。
そして、IPAexゴシックは情報処理推進機構(IPA)が公開しているオープンソースのゴシック体フォントです。
オープンソースということのため、無料で利用できるフォントになります。
また、商用でも利用できることから、日本語と言えばIPAexゴシックが定番です。
以上が、IPAexGothicの説明となります。
では、IPAexGothicをインストールしていきましょう。
実際には、次の作業を行います。
- Fontconfigのインストール
- フォント状況の確認
- IPAexGothicのインストール
それぞれを説明していきます。
Fontconfigのインストール
Fontconfigとは?
「fc-list」コマンドを利用したいだけです。
そのために、Fontconfigパッケージをインストールします。
fc-listにより、システムで利用可能なフォントを表示することが可能です。
Fontconfigパッケージのインストールは、次のコマンドで行います。
$ sudo apt update $ sudo apt install fontconfig
インストールできたかどうかを確認しましょう。
次のコマンドにより、Fontconfigパッケージのバージョンを確認できます。
$ fc-list -V fontconfig version 2.12.6
フォント状況の確認
利用可能なフォントを確認しましょう。
すでに、IPAexGothicがインストールされているかもしれません。
以下のコマンドで確認できます。
$ fc-list /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bol /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=B /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold /usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:st /usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book
もっとシンプルに確認するなら、grepで絞り込みましょう。
$ fc-list | grep 'IPA'
両方の結果を見る限り、IPAexGothicはインストールされていません。
IPAexGothicのインストール
IPAexGothicの公式サイト
https://moji.or.jp/ipafont/ipaex00401/
2020年12月時点では、IPAexゴシック(Ver.004.01)が最新のようです。
IPAexゴシック(Ver.004.01)は、2019年4月に公開されています。
IPAexGothicは、オープンソースです。
aptでインストールできるようにされています。
そのため、Ubuntu(Debian)では次のコマンドでインストール可能です。
$ sudo apt install fonts-ipaexfont
Ubuntuは、本当に楽チンですよね。
一昔前のLinuxなら、ソースをダウンロードしてコンパイルなどをしていました。
インストールが完了したら、確認しましょう。
$ fc-list | grep 'IPA' /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf: IPAexゴシック,IPAexGothic:style=Regular /usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf: IPAex明朝,IPAexMincho:style=Regular /usr/share/fonts/truetype/fonts-japanese-mincho.ttf: IPAex明朝,IPAexMincho:style=Regular /usr/share/fonts/truetype/fonts-japanese-gothic.ttf: IPAexゴシック,IPAexGothic:style=Regular
インストールされていますね。
IPAexゴシックだけでも良かったのですけど、IPAex明朝もインストール済みです。
では、以下でMatplotlibでIPAexGothicを利用するように設定します。
Matplotlibの設定ファイル(matplotlibrc)を変更する
Matplotlibの設定ファイルは、matplotlibrcです。
IPAexGothicをデフォルトで利用するように、matplotlibrcを変更します。
なお、プログラム毎にフォントを変更することも可能です。
しかし、今回はMatplotlibにおけるデフォルトフォントをIPAexGothicに設定します。
ただ、matplotlibrcの居場所がわからないと思います。
その場合は、次のコードで確認できます。
import matplotlib print(matplotlib.matplotlib_fname())
上記プログラムを実行すると、次のようなパスが表示されます。
もちろん、これは実行環境により異なります。
matplotlibrcのパス
/usr/local/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
このmatplotlibrcを編集します。
viなどのエディタで開いて、「#font.」で検索します。
もしくは「250G」で250行にジャンプします。
「#font.family : sans-serif」を「font.family : IPAexGothic」に変更します。
「#」を削除してください。
もし、IPAex明朝を使いたいなら、「font.family :IPAexMincho」とします。
そのまま、matplotlibrcを上書き保存します。
以上、Matplotlibの設定ファイル(matplotlibrc)の変更が終了です。
では、最後に文字化けが解消したかどうかを確認しましょう。
日本語の文字化け解消を確認する
確認のために、「japanse.png」を作成するプログラムを実行しましょう。
次のような画像が作成されれば、日本語の文字化けは解消されています。
ただし、次のようなエラーが出ることがあります。
Linuxだと高い確率で出ると思います。
findfont: Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans.
「IPAexGothicフォントなんてないよ!!」というエラーです。
このエラーが出る場合は、ほぼキャッシュが原因となります。
ちなみに、キャッシュはユーザー毎にあります。
場所は、ホームの下ですね。
なお、ファイル名が同じとは限りません。
$ ls ~/.cache/matplotlib/ fontlist-v330.json
このファイルを削除します。
「rm」コマンドで適当に削除してください。
再度、「japanse.png」を作成するプログラムを実行します。
文字化けせずに「日本語title」で表示されれば、成功です。
以上、「IPAexGothicによりMatplotlibを日本語に対応させる」でした。