Matplotlib 한글 폰트 설정
파이썬으로 데이터 시각화를 할 때 “Matplotlib”을 주로 사용합니다. 최근에 Bokeh나 seaborn와 같은 라이브러리를 사용하기도 하지만, IPython에서 작업할 때 주로 Matplotlib를 선호합니다.
최신의 사용이 편리하고 우수한 다른 라이브러리가 있음에도 Matplotlib를 선호하는 이유는 마지막 실행 결과를 보관하는 기능 때문입니다. Jupyter 파일을 github과 같은 레파지터리에 올려 놓아도 matplotlib는 마지막 실행 결과를 유지하는 것이 장점입니다. Bokeh는 사용하기 편리하고, API가 직관적이며 화려만 웹 기반 차트 제공합니다. 그러나 Bokeh가 웹 기반 기술이다 보니 Jupyter에서 마지막 실행 결과를 보관하지 못하는 한계를 보입니다.
Matplotlib의 한글 문제
Matplotlib를 사용할 때 항상 문제가 되는 부분은 한글 폰트 에러입니다. 데이터를 전처리하여 이미지를 생성하는 방식으로 실행되는 Matplotlib은 기본 설정으로 한글을 지원하지 않습니다. 한글을 사용하기 위해서는 한글 폰트를 명시적으로 지정해야 합니다. 한글 폰트가 설치되어 있지 않거나, 한글 폰트를 지정을 하지 않으면 <그림 1>과 한글 이 깨지는 현상이 발생합니다.
우분투 한글 폰트 설치
윈도우와 맥 OSX의 경우 한글 설정에 어려움이 없을 것 입니다. 리눅스를 사용할 경우에 한글 폰트를 설치해야 합니다. 사용하는 운영체제가 우분투라면 다음과 같은 명령으로 공개 한글 폰트를 설치할 수 있습니다.
$ sudo apt-get inatsll -y fonts-nanum fonts-nanum-coding fonts-nanum-extra
Matplotlib 폰트 정보 관리
matplotlib은 사용할 font 정보를 fontList.json에 관리합니다.
$ ls -al ~/.cache/matplotlib/
합계 60
drwxr-xr-x 3 root root 4096 8월 7 15:41 .
drwx------ 1 root root 4096 8월 7 15:41 ..
-rw-r--r-- 1 root root 47637 8월 7 15:41 fontList.json
drwxr-xr-x 2 root root 4096 8월 7 15:41 tex.cache
fontList.json은 폰트 파일에 대한 주요 정보를 json 형태로 관리합니다.
$ head /root/.cache/matplotlib/fontList.json
{
"_version": 201,
"_FontManager__default_weight": "normal",
"default_size": null,
"ttffiles": [
"/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/DejaVuSans-Oblique.ttf",
"/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf",
"/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf",
"/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf",
"/usr/local/lib/python3.6/dist-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf",
Matplotlib의 한글 폰트 정보 조회
<그림 2>과 같은 Matplotlib의 font_manager로 현재 사용 가능한 한글 폰트 경로와 파일명을 확인 할 수 있습니다.
또한 <그림 3>와 같이 font_manager 객체를 이용하여 폰트 파일의 이름을 확인할 수 있습니다.
Matplotlib 한글 폰트 지정
앞에서 사용 가능한 한글 폰트 이름을 확인했습니다. Matplotlib로 차트에서 한글을 사용하기 위해서는, 앞에서 확인한 폰트 이름을 rc 파라미터로 값으로 설정해야 합니다. 이 코드는 plt.show() 함수 앞에 위치해야 합니다. <그림 4>와 같이
마이너스 폰트 깨짐 문제 해결
한글 사용시 마이머스 폰트가 깨지는 문제가 발생할 수 있습니다. 이 문제는 다음 설정으로 해결할 수 있습니다.
import matplotlib as mpl
mpl.rcParams['axes.unicode_minus'] = False
폰트 상세 설정
폰트 상세 설정은 다음과 같습니다.
plt.rcParams["font.size"] = 12
plt.rcParams["font.family"] = 'NanumGothic'
plt.rcParams['xtick.labelsize'] = 12.
plt.rcParams['ytick.labelsize'] = 12.
전체 코드는 다음 IPython 파일에서 확인할 수 있습니다.