Matplotlib + 한글 (Windows 아나콘다)
Matplotlib + 한글 (Windows 아나콘다)¶
- matplotlib 텍스트 출력시 폰트 특성을 지정 (FontProperties)
- matplotlib 전역으로 한글 글꼴 지정(rcParams)
- 사용가능한 폰트 확인, TTF 폰트 설치 방법
2018 FinanceData.KR http://fb.com/financedata¶
기본정보 확인¶
- 운영체제 버전
- 파이썬 버전
- matplotlib 주요 설치 정보
In [1]:
# 실행중인 운영체제 확인
import platform
platform.platform()
Out[1]:
In [2]:
# 파이썬 버전
import sys
sys.version_info
Out[2]:
In [3]:
# matplotlib 주요 설치 정보
import matplotlib
print ('버전: ', matplotlib.__version__)
print ('설치위치: ', matplotlib.__file__)
print ('설정: ', matplotlib.get_configdir())
print ('캐시: ', matplotlib.get_cachedir())
matplotlib 기본 설정¶
In [4]:
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams["axes.grid"] = True
plt.rcParams["figure.figsize"] = (14,4)
한글이 포함된 간단한 차트¶
In [5]:
import numpy as np
data = np.random.randint(-100, 100, 50).cumsum()
data
Out[5]:
In [6]:
plt.plot(range(50), data, 'r')
plt.title('가격변동 추이')
plt.ylabel('가격')
Out[6]:
한글이 제대로 출력되지 않는 것을 확인할 수 있다
폰트를 지정하는 두가지 방법¶
matplotlib에서 폰트를 지정하여 출력하는 하는 대표적인 방법은 크기 두 가지
- 텍스트 출력시 폰트 특성을 지정: FontProperties 속성으로 폰트 속성을 지정
- 전역으로 지정: rcParams 을 사용하여 전역으로 설정값을 지정
텍스트 출력시 폰트 특성을 지정¶
텍스트를 출력하는 다음 함수들을 사용할 때, fontproperties 인자에 폰트를 지정할 수 있다.
matplotlib.pyplot
- title()
- xlabel()
- ylabel()
- legend()
- text()
matplotlib.axes
- set_title()
예를 들어, 다음과 같이 텍스트와 폰트를 지정하여 출력할 수 있다.
- plt.text(0, 0, "Sample Text", fontproperties=fontprop)
무료 한글폰트¶
- https://brunch.co.kr/@jade/203 저작권 걱정없는 무료 한글폰트
폰트 프로퍼티를 지정하여 사용¶
In [7]:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
font_path = 'C:/Windows/Fonts/EBS훈민정음R.ttf'
fontprop = fm.FontProperties(fname=font_path, size=18)
plt.ylabel('가격', fontproperties=fontprop)
plt.title('가격변동 추이', fontproperties=fontprop)
plt.plot(range(50), data, 'r')
plt.show()
폰트를 각기 지정해서 사용하기¶
In [8]:
# TTF폰트 파일을 직접 지정하는 방법 (나눔 펜 글씨)
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
path_gothic = 'C:/Windows/Fonts/NanumMyeongjoExtraBold.ttf'
fontprop1 = fm.FontProperties(fname=path_gothic, size=20)
path_pen = 'C:/Windows/Fonts/NanumPen.ttf'
fontprop2 = fm.FontProperties(fname=path_pen, size=34)
plt.plot(range(50), data, 'r')
plt.ylabel('가격', fontproperties=fontprop1)
plt.title('가격변동 추이', fontproperties=fontprop2)
plt.show()
폰트가 항상 'C:/Windows/Fonts'에 있어야만 하는 것은 아니다.
ttf 폰트 파일을 복사해서 바로 사용할 수 도 있다. 현재 디렉토리에 malgun.ttf 파일을 복사하여 다음과 같이 ttf 파일을 지정하여 사용할 수 있다.
In [9]:
import matplotlib.font_manager as fm
fontprop = fm.FontProperties(fname="malgun.ttf", size=24)
plt.title('맑은고딕 제목', fontproperties=fontprop)
plt.plot(data)
plt.show()
전역 글꼴 설정: matplotlib.rcParams[]¶
matplotlib.rcParams을 통해 matplotlib의 다양한 설정값을 읽거나 지정할 수 있다.
In [10]:
# 기본 설정 읽기
import matplotlib.pyplot as plt
# size, family
print (plt.rcParams['font.size'] )
print (plt.rcParams['font.family'] )
In [11]:
# serif, sans-serif, monospace
print (plt.rcParams['font.serif'])
print (plt.rcParams['font.sans-serif'])
print (plt.rcParams['font.monospace'])
폰트의 기본값들을 다음과 같이 설정할 수 있다
In [12]:
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'nanummyeongjo'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 24.
plt.rcParams['xtick.labelsize'] = 12.
plt.rcParams['ytick.labelsize'] = 12.
plt.rcParams['axes.labelsize'] = 20.
plt.title('가격의 변화')
plt.plot(range(50), data, 'r')
plt.show()
레이블에 '-'가 있는 경우 유니코드의 '-'문자를 그대로 출력하면 '-' 부호만 깨져 보인다. 이를 방지하기 위해 'axes.unicode_minus' 옵션을 False로 지정한다.
TTF 파일에서 font.family 이름 얻어 전역 설정¶
"font.family"에 지정할 이름을 .ttf 파일로 부터 얻을 수 있다
In [13]:
from matplotlib import font_manager
font_fname = 'C:/Windows/Fonts/NanumGothic.ttf'
font_family = font_manager.FontProperties(fname=font_fname).get_name()
print(font_family)
In [14]:
import matplotlib.pyplot as plt
from matplotlib import font_manager
font_fname = 'C:/Windows/Fonts/NanumGothic.ttf'
font_family = font_manager.FontProperties(fname=font_fname).get_name()
plt.rcParams["font.family"] = font_family
matplotlib에 새로운 폰트를 추가하기¶
- .ttf 폰트를 matplotlib으로 복사한다
(아나콘다를 사용하는 경우 보통 아래 디렉토리이다. Seung-June는 사용자 이름)C:\Users\Seung-June\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttffonts\ttf
- matplotlib cache 폴더의 내용 삭제한다
- 커널 재시작(주피터 노트북 재시작)
(참고) 시스템에 설치된 글꼴 확인¶
In [15]:
# 사용가능한 시스템의 TTF 폰트 목록
import matplotlib.font_manager as font_manager
font_list = font_manager.findSystemFonts(fontpaths=None, fontext='ttf')
print('사용가능한 TTF 폰트 개수:', len(font_list))
font_list[:10] # 목록에서 처음 10 개만 보기
Out[15]:
In [16]:
# 참고) matplotlib cache 위치를 확인하는 방법
matplotlib.get_cachedir()
Out[16]:
In [17]:
# matplotlib 설정 파일의 위치
matplotlib.matplotlib_fname()
Out[17]:
댓글
Comments powered by Disqus