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 で日本語フォント表示の確認
import numpy as np
import matplotlib.pyplot as plt
%config InlineBackend.figure_formats = ['svg']
# 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 で日本語フォント表示の確認
from sympy.abc import *
from sympy import *
# SymPy Plotting Backends (SPB)
from spb import *
# グラフを SVG で Notebook にインライン表示
%config InlineBackend.figure_formats = ['svg']
graphics(
line(sin(x), (x, -2*pi, 2*pi), '正弦関数'),
xlabel = '横軸ラベル',
ylabel = '縦軸ラベル',
legend = True
);
同じフォルダ内に matplotlibrc がなくても日本語表示できるように設定
以下のセルを1回だけ実行します。
! 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 がなくても,グラフに日本語が表示できます。