2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cloud Pak for DataのNotebookでmatplotlibのグラフ日本語文字化けを解消する

Last updated at Posted at 2020-06-01

matplotlibやseabornでグラフを書いた時に、グラフの日本語が文字化けして以下のように豆腐(□□□)になることがあります。
image.png

これは環境に日本語フォントが入っていなかったり、適切に設定されていないことが原因で、matplotlib/seaborn固有の問題です。解決策は他の記事でも解説されていますが、これをCloud Pak for Data (以下CP4D)上で解決する方法です。

環境: CP4D v2.5, v3.0LA

CP4Dでは、Notebookで起動するPython環境は予め用意されており、かつランタイムを起動するたびに初期状態で起動するため、一度Python環境に設定すれば未来永劫OKというわけには行きません。
暫定策として、Notebook内で解決策(フォントのダウンロードと設定変更)を実施します。

matplotlibの日本語文字化け対応策 (CP4D版)

以下のコードをNotebookの先頭で実行します。フォントは先の記事にもあったIPAのフォントを使った例です。

# download and install a Japanese font
!cd /tmp; curl -O https://ipafont.ipa.go.jp/IPAexfont/ipaexg00401.zip
!unzip -jo /tmp/ipaexg00401.zip -d ~/.fonts
# register the font
!fc-cache -fv; fc-list
# reset the matplotlib cache
!rm -rf ~/.cache/matplotlib

(オプション) 上記の実行後、以下のコードでmatplotlibが認識できるフォントにIPAexGothicが追加されたことを確認します。これを見ると、元々CP4DのデフォルトPython環境ではDejaVu Sansしか無かったことが分かります。

import matplotlib.font_manager;
[matplotlib.font_manager.FontProperties(fname=fname).get_name() for fname in matplotlib.font_manager.get_fontconfig_fonts()]
# -output-
#['DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'DejaVu Sans',
# 'IPAexGothic']

グラフを書く前に、rcParamsでfont.familyを指定すればOKです。

from matplotlib import pyplot as plt
from matplotlib import rcParams
plt.rcParams['font.family'] = 'IPAexGothic'

実行例

# download and install a Japanese font
!cd /tmp; curl -O https://ipafont.ipa.go.jp/IPAexfont/ipaexg00401.zip
!unzip -jo /tmp/ipaexg00401.zip -d ~/.fonts
# register the font
!fc-cache -fv; fc-list
# reset the matplotlib cache
!rm -rf ~/.cache/matplotlib
# -output-
# 省略
サンプルデータを用意
import pandas as pd
df = pd.DataFrame({
    'あいうえお' : [1,2,3,4,5],
    'カキクケコ' : [0.1,0.2,0.3,0.4,0.5],
    'サシスセソ' : [10,20,30,40,50],
    '漢字' : [100.1,100.2,100.3,100.4,100.5]
})
df
# -output-
#	あいうえお	カキクケコ	サシスセソ	漢字
# 0	1	0.1	10	100.1
# 1	2	0.2	20	100.2
# 2	3	0.3	30	100.3
# 3	4	0.4	40	100.4
# 4	5	0.5	50	100.5
グラフを描画
%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import rcParams
import seaborn as sns

# Specify font
plt.rcParams['font.family'] = 'IPAexGothic'

sns.pairplot(df)

結果:
image.png


(追記) CP4D v3.0.1からは、Python環境のカスタムイメージを作成することで、予めフォントを導入済みの環境を作ることができるようです。もしうまく行けば、それが恒久策として使えそうです。機会があればチャレンジします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?