新しい弘大 JupyterHub の matplotlib や sympy-plotting-backends で日本語を表示させる設定

matplotlib でタイトルやラベル・凡例に日本語を表示させる場合には,

import japanize_matplotlib

すればよい,というのが検索すれば出てくる。確かに matplotlib だけならこれでいいが,試してみたところでは新しい弘大 JupyterHub の sympy-plotting-backends では import japanize_matplotlib しても日本語フォント部分がトーフになる。

そんなときは,あらかじめ

fc-list | grep Noto

で Noto フォントがインストールされていることを確認し,~/.config/matplotlib/matplotlibrc に以下のようにフォント設定を書く。

## If you wish to change your default style, copy this file to one of the
## following locations:
## Unix/Linux:
## $HOME/.config/matplotlib/matplotlibrc
## Other platforms:
## $HOME/.matplotlib/matplotlibrc
##
## matplotlib や sympy plotting backends で日本語フォントを使う
##

font.serif: Noto Serif CJK JP, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
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
font.monospace: Noto Sans Mono CJK JP, DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace

こうすれば,import japanize_matplotlib は不要で日本語がトーフにならずに表示される。

旧 JupyterHub では受講学生の便宜をはかるために管理者権限で system-wide な matplotlibrc を書き換えていたが,新 JupyterHub ではそのような権限もないので,ユーザー毎に設定してもらうほかないが,どうやってこの設定を受講学生にやってもらうかが悩みの種。

追記:設定ファイル matplotlibrc の設置と設定確認のノートブック

授業では,以下のような方法を試してみることに。

まず,上記のフォント設定が記載された設定ファイル matplotlibrc を Moodle からダウンロードしてもらい,ダウンロードした matplotlibrc を,弘大 JupyterHub の各自の授業用のフォルダ(ディレクトリ)にアップロードする。

matplotlibrc の内容

font.serif: Noto Serif CJK JP, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, 
serif 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 
font.monospace: Noto Sans Mono CJK JP, DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace

次に,以下のような内容のノートブックファイル「matplotlib 日本語フォント設定確認.ipynb」も Moodle からダウンロードしてもらい,同じく弘大 JupyterHub の各自の授業用のフォルダ(ディレクトリ)にアップロードし,開いて各セルを実行する。Matplotlib はノートブックと同じフォルダ(ディレクトリ)に matplotlibrc があるとその内容を読み込むため,日本語フォントで表示される。

matplotlib 日本語フォント設定確認.ipynb

新しい弘大 JupyterHub の matplotlib や sympy-plotting-backends で日本語を表示させるためのフォント設定の確認。

matplotlibrc の設置

何はともあれ,日本語フォント設定のファイル matplotlibrc を授業用フォルダにアップロードしておくこと。このノートブックファイル「matplotlib 日本語フォント設定確認.ipynb」も同じく,授業用フォルダにアップロードする。

matplotlib で日本語フォント表示の確認
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
%config InlineBackend.figure_formats = ['svg']
In [ ]:
# ax を使う際の最初のおまじない
fig, ax = plt.subplots()

x = np.linspace(-2*np.pi, 2*np.pi, 200) 
y = np.sin(x)
ax.plot(x, y, label = '正弦関数')

ax.set_title('タイトル')
ax.set_xlabel('横軸ラベル')
ax.set_ylabel('縦軸ラベル')
ax.grid()
ax.legend();
SymPy Plotting Backends で日本語フォント表示の確認
In [ ]:
from sympy.abc import *
from sympy import *

# SymPy Plotting Backends (SPB)
from spb import *
# グラフを SVG で Notebook にインライン表示
%config InlineBackend.figure_formats = ['svg']
In [ ]:
graphics(
    line(sin(x), (x, -2*pi, 2*pi), '正弦関数'),
    xlabel = '横軸ラベル', 
    ylabel = '縦軸ラベル', 
    legend = True
);
同じフォルダ内に matplotlibrc がなくても日本語表示できるように設定

以下のセルを1回だけ実行します。

In [ ]:
! echo "font.serif: Noto Serif CJK JP, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif" > ~/.config/matplotlib/matplotlibrc
! echo "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" >> ~/.config/matplotlib/matplotlibrc
! echo "font.monospace: Noto Sans Mono CJK JP, DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace" >> ~/.config/matplotlib/matplotlibrc

これで,ノートブックファイルと同じフォルダに matplotlibrc がなくても,グラフに日本語が表示できます。