Python
matplotlib
DSX
Watson-Studio

Watson Studio Jupyter Notebook上のmatplotlibで日本語ラベルを表示させる

(2018-03-27) DSXの名称がWatson Studioに代わり、デフォルトのPython Versionが3.5になったことに対応
(2018-04-18) OSの構成が変わり、前の手順でうまくいかなくなったことへの対応

最近、Watson Studio上のJupyter Notebookを触っているのですが、ずっとmatplotlibで漢字が表示できなくて(いわゆる「豆腐問題」)悲しい思いをしていました。
ようやく漢字を表示する方法を見つけましたので、備忘録のメモを兼ねてここに記載しておきます。
テストしているのはPython3.5の環境です。
なお、IBM DSXの時には、一度追加導入したOSイメージはずっと使えたのですが,Watson Studioになって課金体系が変わった影響で一度追加導入して修正したOSイメージは数時間すると使えなくなってしまいます。そのため、以下の手順はWatson Studioを使うたびに行う必要があります。

matplotlibを最新版にアップデート

まず、matplotlibを最新版(2018-04-18時点で2.2.2)にアップデートします。
具体的には、カスタム構成を作って、その中でmatplotlibのアップデートを行います。
ご参考までに以下に、私が普段使っているカスタム構成ファイルを添付します。(他にもいくつかのライブラリの導入・アップデートを行っています)

# Please add conda channels here
channels:
- defaults

# Please add conda packages here
dependencies:

# Please add pip packages here
# To add pip packages, please comment out the next line
- pip:
  - numpy==1.14.2
  - pydot==1.2.3
  - pyparsing==2.2.0
  - h5py==2.8.0rc1
  - matplotlib==2.2.2

設定手順

フォントはライセンスが問題とならないようIPAフォントを利用します。
以下のコマンドでダウンロード、解凍を行い、フォントパスのあるディレクトリにTTFファイルをコピーします。

import os
if not os.path.exists('/opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf/ipaexg.ttf'):
    !cp ai-adv-data/ipaexg00201/ipaexg.ttf /opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/fonts/ttf
    !echo 'font.family : IPAexGothic' >> /opt/conda/envs/DSX-Python35/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc
    print('IPA font copied!')

カーネル再起動

設定が終わったらカーネルの再起動を行います。

テスト

以下のコードで「豆腐」の文字がグラフ上でも「豆腐」と表示されたら日本語化成功です。
うまくいくと、下の完成図のようになります。

import matplotlib.pyplot as plt
%matplotlib inline
plt.figure()
plt.xlabel('豆腐 - tofu')
plt.title('豆腐 - TOFU')

完成図
スクリーンショット 2017-11-14 16.50.22.png

おまけ
やっとこういうのができるようになりました
スクリーンショット 2017-11-14 17.03.21.png