Koo's.Co

[Matplotlib] 한글 폰트 설정, 글꼴 변경 본문

DataScience

[Matplotlib] 한글 폰트 설정, 글꼴 변경

kth321 2020. 8. 29. 05:32

Matplotlib에서 기본적으로 제공하는 폰트는 한글을 제공하지 않는다. 그러므로 한글 폰트를 적용하기 위해서는 한글을 지원하는 폰트를 설치하고 바꿔주어야 한다.

 

한글을 지원하지 않아 ㅁㅁㅁ으로 뜬다

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np

def example_f(x):
    return x**2

x = np.arange(0,100,1)
plt.xlabel('이것은 엑스축')
plt.ylabel('이것은 와이축')
plt.title('이것은 제목')
plt.plot(x, example_f(x))

 

ppt 파일을 열심히 만들고 발표하는 컴퓨터에서 ㅁㅁㅁㅁ처럼 글씨가 나타나는 경우가 있다. 이건 ppt를 만든 컴퓨터에는 폰트가 설치되어 있고, 발표하는 컴퓨터에는 폰트가 설치되어 있지 않아서 그렇다. 마찬가지로 Matplotlib에서 기본적으로 제공하는 폰트는 한글을 지원하지 않으므로 따로 설치해주어야 한다.

 

1. 글자 폰트 다운

글꼴은 네이버에서 공개한 나눔 글꼴을 사용할 것이다. Matplotlib은 TrueTypeFont(*. ttf) 확장자를 사용한다. 윈도우에서도 맑은고딕이나 굴림과 같은 한글을 지원하는 글꼴을 제공하지만 얘네들은 TrueTypeCollection(*. ttc) 확장자로 Matplotlib에서는 사용할 수 없다.

 

네이버의 나눔글꼴은 아래 url에서 다운로드할 수 있다.

 

 

[네이버 한글한글아름답게 : 마루 프로젝트]

마루 프로젝트는 디지털 화면용 부리 글꼴을 사용자와 함께 만들어 갑니다.

hangeul.naver.com

 

2. 글자 폰트 적용

1) 폰트 추가

글자 폰트를 적용하기 위해서는 우선 matplotlib의 font 파일에 한글을 지원하는 폰트를 추가해주어야 한다.

import matplotlib as mpl

print(mpl.matplotlib_fname())

위 명령어는 matplotlib의 matplotlibrc 파일의 위치를 출력한다. 해당 파일에 들어가면 fonts/ttf 에 해당하는 폰트 파일들을 넣어주면 된다.

다음 matplotlib 캐시에 변경된 내용이 반영되어야 한다. 다음 코드는 캐시파일이 저장된 폴더를 반환한다. 

print(mpl.get_cachedir())

위 파일을 포함

해당 파일을 삭제하고 다시 코드를 실행하면 변경된 내용을 포함한 fontlist가 다시 생성된다. 

여기서 캐시 파일이 새로 생성이 되지 않아 한참을 헤매었는데 컴퓨터를 한 번 껐다 켜니까 캐시 파일이 다시 생성되었다...

혹시 캐시파일이 생성되지 않으면 한 번 껐다 켜보자

fontlist 파일에 새로운 파일에 대한 정보가 올라가지 않으면 matplotlib에서 인식할 수 없으니 반드시 캐시에 등록이 되어야 한다

 

정상적으로 폰트가 추가되었다면 캐시폴더의 fontlist에 폰트에 대한 정보가 새로 추가되어 있다.

2) 폰트 변경

(1) 전체 설정 변경

print(mpl.rcParams['font.family'])
print(mpl.rcParams['font.size'])

위 명령어를 사용하면 현재 적용되고 있는 폰트의 종류와 크기를 출력한다. 이 명령어를 이용해 폰트와 크기를 변경할 수 있다. matplotlibrc는 matplotlib의 설정을 변경할 수 있는 파일이다. 해당 파일은 설정들이 주석 처리되어 있는데 해당 파일에 들어가서 설정을 직접 변경할 수도 있고 rc명령어를 이용해 설정을 변경할 수도 있다.

 

또 다른 방법으로는 rcParams를 사용하는 것이다.

rcParams를 사용하면 직접 파일을 열지 않고 값을 변경할 수 있다.

matplotlibrc 파일에서 설정 변경 가능

파일을 열어 내용을 확인하면 JSON형태로 폰트가 지정되어 있다.

 

rc명령어를 사용하여 폰트를 변경하려면 다음과 같이 하면 된다.

이 때 주의할 점은 font.family를 파일의 이름이 아닌 fontlist에 있는 폰트의 'name'으로 변경해야 한다는 것이다.

mpl.rcParams['font.family'] = 'Nanum Brush Script'
mpl.rcParams['font.size'] = 25

 

정상적으로 한글이 적용된 것을 확인할 수 있다.

 

(2) 특정 부분만 설정 변경

특정 부분에서만 글꼴 설정을 변경하고 싶을 수 있다. 이 때는 글꼴 파일의 절대 경로를 제공해 해당 부분에서만 글꼴을 변경할 수 있다.

import matplotlib.font_manager as fm

path = 'C:\\WINDOWS\\Fonts\\나눔고딕Bold.ttf'
fontprop = fm.FontProperties(fname=path)

절대 경로를 저장하고 font_manager의 FontProperties에 경로를 넘겨준다. 

fontprop 변수는 나눔고득Bold 글꼴을 저장하고 있다. 사용하고 싶을 때만 fontproperties=fontprop 옵션을 적어주면 해당 글꼴만 변경할 수 있다.

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import numpy as np

def example_f(x):
    return x**2

def example_2(x):
    return x*2
x = np.arange(0,10,1)

path = 'C:\\WINDOWS\\Fonts\\나눔고딕Bold.ttf'
fontprop = fm.FontProperties(fname=path)
plt.title('예시 graph', fontproperties=fontprop)
plt.plot(x, example_f(x))
plt.xlabel('이것은 엑스축')
plt.ylabel('이것은 와이축')
plt.title('이것은 제목', fontproperties=fontprop)
plt.plot(x, example_2(x))

글씨체가 서로 다른 것을 볼 수 있다

 

처음하면 헷갈릴 수 있다.. 캐시 파일이 생성되지 않아 한참을 해맸다. 한 번 배우면 다음에 할 때는 어렵지 않게 할 수 있으므로 꼭 한 번 해보자:)

 

'DataScience' 카테고리의 다른 글

[Matplotlib] 정규분포 그리기  (0) 2020.09.02
정규분포의 정의와 평균, 분산  (0) 2020.09.02
[Matplotlib] 개요  (0) 2020.08.26
가우스 적분  (0) 2020.08.26
[Numpy] 뷰  (0) 2020.08.26
Comments