2015년 7월 22일 수요일

아이파이썬(IPython) 노트북에서 플롯(Plot)에 한글 폰트 사용하는 방법

플롯 영역에서의 한글 문제는 어플리케이션을 가리지 않고, 다양하게 발생하지만,
최근에 발생하는 이슈는 대략 폰트 관련된 부분이 많다.

필자는 R Studio, PIWIK과 같은 툴 에서도 한글이 깨지는 문제를 발견 했고,
모두 한글 폰트를 지정하는 방법으로 해결했다.

폰트는 OS 시스템에서 제공되는 기본 폰트 영역을 변경하거나,
각 어플리케이션에서 지정(추가/변경) 가능한 기능을 찾아서 해결하자.

이번 글은 표제와 같이,
리눅스 기반의 2D 플롯 라이브러리인 Matplotlib에서 맥북 다양한 글씨체를 사용하는 것을 목표로 작성한다.

1. 맥북에서 사용할 폰트 선정하기

"서체 관리자"(Font Book.app)에서 원하는 폰트를 찾아서,
서체 파일을 파이톤 노트를 사용하고자 하는 시스템으로 옮긴다.

예제로 필기체(Pilgiche.ttf)를 가지고 진행해 보았다.

2. 폰트 사용하는 2가지 방법 소개

가. 시스템에 폰트를 등록해서 사용하기

In [2]:
# OS 환경마다 조금 다를 수 있지만, UNIX 계열은 대략 비슷하다.
# Pilgiche.ttf를 /usr/share/fonts에 넣고 다음과 같이 강제로 갱신해 준다. 
!fc-cache -f
In [3]:
# 폰트가 추가 되었는지 확인 한다.
# 기존에 사용하던 AppleGothic과 새로 추가한 PilGi
!fc-list | egrep -e "PilGi|AppleGothic"
AppleGothic:style=일반체,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,Regulier,Обычный,常规体
PilGi:style=일반체,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,Regulier,Обычный,常规体

나. Matplotlib에 등록해서 사용하기

In [4]:
!ls /usr/local/lib/python3.4/site-packages/matplotlib/mpl-data/fonts/ttf/ |grep Pilgi
Pilgiche.ttf

다. 파이톤 노트의 폰트를 갱신하기.

앞서 설명한 두가지 방법 "가|나" 중에 하나를 수행하고 다음을 수행하면 된다.
  • 캐싱 공간 (~/.cache/matplotlib/* )을 걱정 말고 깔끔하게 지워 준다.
  • 파이톤 노트를 다시 구동하면, 모듈이 호출될때, 변경 사항이 반영된다.
Matplotlib에서 제공하는 fontmanager라는 모듈을 사용해서 다체롭게 사용하는 방법도 있지만,
정신 건강을 위해서 rcParams를 사용하는 방법을 추천한다.
In [6]:
# Default font family로 폰트를 지정하는 과정이다.
# 일반적으로 제공되는 기본(Default) 폰트는 한글을 처리 못한다.
rcParams['font.family'] = 'sans-serif'
text(s=rcParams['font.family'].__str__()+'훈민정음',x=.1,y=.7,fontsize=30)
# 한글을 지원하고, 개인이 선호하는 폰트 지정 사용
rcParams['font.family'] = 'AppleGothic'
text(s=rcParams['font.family'].__str__()+'훈민정음',x=.1,y=.5,fontsize=25)
rcParams['font.family'] = 'PilGi'
text(s=rcParams['font.family'].__str__()+'훈민정음',x=.1,y=.3,fontsize=30)
Out[6]:
<matplotlib.text.Text at 0x7f56f5281d30>

각 함수 객체별로 font family 파라메터를 통해서, (대부분) 개별 지정도 가능하다.
rcParams의 경우는 따로 font family가 지정되지 않은 객체들에 대해서 적용된다.


0 개의 댓글:

댓글 쓰기