Cloud Pak for Data의 Notebook에서 matplotlib 그래프 일본어 깨짐을 없애기

matplotlib이나 seaborn에서 그래프를 쓸 때 그래프의 일본어가 깨져 아래와 같이 두부(□□□)가 될 수 있습니다.


이는 환경에 일본어 글꼴이 없거나 제대로 설정되지 않았기 때문에 matplotlib/seaborn 관련 문제입니다. 이 솔루션은 기타 기사에서도 설명되었지만 Cloud Pak for Data (이하 CP4D)에서 해결하는 방법입니다.

환경: CP4D v2.5, v3.0LA

CP4D에서는 Notebook에서 기동하는 Python 환경은 미리 준비되어 있으며, 또한 런타임을 기동할 때마다 초기 상태로 기동하기 때문에, 일단 Python 환경으로 설정하면 미래 영원 OK라고 하는 것은 가지 않습니다.
잠정책으로 Notebook 내에서 해결책(폰트 다운로드 및 설정 변경)을 실시합니다.

matplotlib의 일본어 편지 대응책 (CP4D 버전)



다음 코드를 노트북의 시작 부분에서 실행합니다. 폰트는 앞의 기사에도 있던 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를 지정하면 괜찮습니다.
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)

결과:


(추기) CP4D v3.0.1부터는 Python 환경의 커스텀 이미지를 작성하는 것으로, 미리 폰트를 도입이 끝난 환경을 만들 수 있는 것 같습니다. 만약 잘 가면, 그것이 영구책으로서 사용할 수 있을 것 같습니다. 기회가 있으면 도전합니다.

좋은 웹페이지 즐겨찾기