みらいテックラボ

音声・画像認識や機械学習など, 管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

matplotlibでGoogle日本語フォントを使う

pythonでデータを可視化するのにmatplotlib[1]やseaborn[2]を使用しているが, デフォルト設定では日本語が表示されない.

f:id:moonlight-aska:20180416010555p:plain:w500

日本語表示する必要がそれほどあるわけではないが, 今回資料作成のために日本語が表示できるようにしてみようと思い, Googleフリーフォント Noto Sans CJK JP[3]を導入しようとしたが, 少しハマったので, 設定手順をまとめておく.


0. 導入環境
今回導入した環境は, 以下の通り.
・OS : Ubuntu 16.04
python 3.6.2
・matplotlib 2.2.2
・seaborn 0.8.1


1. 設定手順
1) フォントのインストール
1-1) ここから, "Noto Sans CJK JP"をダウンロードする.
1-2) GoogleのNoto Sans CJK JPフォントをインストールする.

$ cd /usr/share/fonts/opentype
$ sudo mkdir notosans
$ sudo cd notosans
$ sudo unzip (download dir)/NotoSansCJKjp-hinted.zip

1-3) "a+r"権限を付与する.

$ sudo chmod a+r NotoSans*

[ハマりどころ1]
Noto Sans CJK JPはaptコマンドでもインストール可能だが, この方法でインストールしてもmatplotlibではうまくフォントを見つけられなかった.
何かやり方はあるのだろうが....

[ハマりどころ2]
Noto Sans CJK JPをダウンロード & zipを解凍しただけだと, フォントを読み込む際にリード権限がないため, 表示されない.
パーミッションエラーと気付くのに時間がかかった.

f:id:moonlight-aska:20180416010643p:plain:w500

2) matplotlibrcの設定
2-1) matplotlibrcを探す.

$ cd ~/
$ find . -name matplotlibrc -print
./anaconda3/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
./anaconda3/envs/tf13/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
./anaconda3/envs/py36/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
./anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
 :

2-2) matplotlibrcをコピーする.

$ cp ./anaconda3/envs/tf13/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc ./.config/matplotlib/

2-3) matplotlibrcを編集する.
フォント設定を変更する.

#### FONT
 :
font.serif          : Noto Sans CJK JP
font.sans-serif     : Noto Sans CJK JP
 :

2-4) キャッシュを削除する.

$ rm ./.cache/matplotlib/fontList.py3k.cache

3) 動作確認
xlabel, ylabelで正しく日本語が表示された.
f:id:moonlight-aska:20180416010912p:plain:w500

おまけ[4]
フォントチェックのために書いたコードも載せておきます.

----
参照URL:
[1] Matplotlib: Python plotting
[2] seaborn: statistical data visualization
[3] Google Noto Fonts
[4] matplotlib と Seaborn の軸の日本語設定




現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)

現場で使える! TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)


Pythonで学ぶあたらしい統計学の教科書 (AI & TECHNOLOGY)

Pythonで学ぶあたらしい統計学の教科書 (AI & TECHNOLOGY)


PythonユーザのためのJupyter[実践]入門

PythonユーザのためのJupyter[実践]入門


Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理