Dockerで作ったデータサイエンス環境のmatplotlibで日本語を使う

先日、Dockerを使ったデータサイエンス環境を作りました。

この環境には日本語のフォントが入っていないし、日本語のフォントを使う設定もされていないので、matplotlibで日本語を含む図を描こうとすると化けてしまいます。

まぁ、英語だけでも良いか・・・という思うところもあるのですが、執筆や研修講師のお仕事もあるので、そんなときはやっぱり日本語で表示したいところです。もちろん、自分自身の用途でも日本語でラベルなどが表示されていた方が分かりやすいですしね。
そこで、日本語で作図できるようにしたいと思います。

Noto Sans CJK JPのダウンロード

jupyter/data-scienceイメージには日本語のフォントが入っていないので、まずはNoto Sans CJK JPというフォントのダウンロードから始めましょう。
Googleのこちらのサイトからダウンロードできます。

こちらのサイトで「Noto Sans CJK JP」を検索して、ダウンロードします。

以前のデータサイエンス環境を作るときの記事に書いたように、Dockerコンテナ上の/home/jovyanにローカルのフォルダをマウントしていると思います。そのフォルダの直下に.fontsというフォルダ(コンテナ側で/home/jovyan/.fontsと見える)を作成し、ダウンロードしたファイルを展開するとみつかるotfという拡張子のファイルを配置します。

Dockerコンテナのデータサイエンス環境で稼働しているJupyter Notebookを開き、下記のプログラムを実行します。

!fc-list

これはOS(Dockerコンテナ)側で認識しているフォントの一覧が表示されます。

このように、/home/jovyan/.fonts配下のNoto Sans CJK JPフォントが見つかればOKです。

matplotlibrcファイルの作成

次に、ノートブックで下記のプログラムを実行します。

import shutil
from matplotlib import matplotlib_fname

shutil.copyfile(matplotlib_fname(), 'matplotlibrc')

すると、ノートブックファイルと同じディレクトリに、matplotlibrcというファイルができます。このファイルを、コンテナ側で/home/jovyan/.config/matplotlib/matplotlibrcとなるように、ディレクトリを作成し移動します。

次に、このmatplotlibrcファイルを下記のように編集します。

# このような箇所があります
#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 先頭にNoto Sans CJK JPを追記します
font.sans-serif : Noto Sans CJK JP, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

フォントマネージャのリビルド

再びJupyter Notebookを開き、下記のプログラムを実行します。

import os
import numpy as np
from matplotlib import pyplot as plt, font_manager

font_manager._rebuild()

ここでカーネルのリスタートをすると良いでしょう。

日本語を含む図表を描画

このようなプログラムで適当なグラフを描きます。

np.random.seed(0)
x = range(5)
y = 10 + 5 * np.random.randn(5)
fig = plt.figure()
ax = fig.add_subplot(111)

ax.set_title('日本語を指定したタイトル')
ax.bar(x, y)

plt.show()

このように日本語を含む図表を描くことができました!

この記事を書いた人

井上 研一

経済産業省推進資格ITコーディネータ/ITエンジニア。株式会社ビビンコ代表取締役。コールセンターへのAI導入プロジェクトに参画したことをきっかけに、AI・IoTに強いITコーディネータとして活動。株式会社ビビンコでは、IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。