2020.08.05 · 技術と道具

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を開き、下記のプログラムを実行します。

PYTHON
!fc-list

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

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

matplotlibrcファイルの作成

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

PYTHON
import shutil
from matplotlib import matplotlib_fname

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

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

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

TEXT
# このような箇所があります
#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を開き、下記のプログラムを実行します。

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

font_manager._rebuild()

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

日本語を含む図表を描画

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

PYTHON
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()

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

2020/08/05 16:48
← MacBook Pro 13インチのUSB PD充電器をいろ…
Jupyter Notebook上でconda仮想環境を切り… →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。