본문 바로가기
작업/Linux, etc

matplotlib 한글 폰트 설정

 

 

Jupyter lab 등에서 matplotlib 그래프 출력을 할 때

한글 폰트는 깨져서 나오는 문제가 발생합니다.

 

이는 초기 설정된 폰트가 한글을 지원하지 않기 때문입니다.

matplotlib의 폰트 환경을 변경하는 과정을 알려드립니다.


matplotlib에서 ' rcParams ' 값이 있습니다.

" Runtime Configuration Parameters"

런타임 구성 매개변수, matplotlib의 전역 설정값입니다.

 

import matplotlib as mpl

# rcParams 딕셔너리 내의 값 확인
mpl.rcParams

"""
'figure.titlesize': 'large',
'figure.titleweight': 'normal',
'font.cursive': ['Apple Chancery',
                 'Textile',
                 'Zapf Chancery',
                 'Sand',
                 'Script MT',
                 'Felipa',
                 'Comic Neue',
                 'Comic Sans MS',
                 'cursive'],
'font.family': ['sans-serif'],
'font.fantasy': ['Chicago',
                 'Charcoal',
                 'Impact',
                 'Western',
                 'xkcd script',
                 'fantasy'],
                 ...
"""

 

 

Dictionary 자료이기 때문에 딕셔너리 참조로 개별값을 볼 수 있습니다.

mpl.rcParams['font.family']
# ['sans-serif']

 

초기 설정된 font-family의 값은 'sans-serif'임을 알게 되었습니다.

이 설정을 한글 지원하는 폰트로 변경하면 됩니다.


새로 반영할 폰트는 간단하게 OS에서 사용하는 것으로 가져오겠습니다.

Windows의 경우 "C:\windows\Fonts"에 저장되어 있습니다.

경로에 보이지 않는다면 "Fonts"를 파일탐색기 내에 검색하면 나옵니다,

 

Fonts 내 폰트 파일들

 

 

적용할 폰트 파일을 우클릭 후 '속성'에 들어갑니다.

파일명을 확인할 수 있습니다.

 

여기서 필요한 정보는 "폰트 파일 경로"입니다.

" C:\Windows\Fonts\malgun.ttf "

 


찾아낸 경로의 폰트 파일을 불러와 반영해야 합니다.

현재 font는 "sans-serif"인데 "경로"가 아닌 "폰트명"입니다.

이는 경로에서 직접 가져오는 것이 아니라

사용할 수 있도록 '준비된' 값을 사용한다는 것입니다.

 

matplotlib의 font_manager 모듈에서

경로에 있는 폰트 파일을 적용할 수 있도록 도와줍니다.

 

import matplotlib.font_manager as fm

# 적용할 폰트의 경로명
path = 'C://Windows//Fonts//NanumGothic.ttf'

# 폰트 파일을 가져와 설정에 반영하고, get_name()으로 "폰트명"을 가져옴.
# fname : 가져올 폰트 경로
# size  : 포트 사이즈 설정
font_name = fm.FontProperties(fname=path, size=30).get_name()

# 폰트 설정 값을 가져온 후의 "폰트명"으로 font.family 값 변경.
mpl.rcParams['font.family'] = font_name

 

matplotlib.pyplotrc Method로 변경할 수도 있습니다.

rcParams의 값을 변경해주는 Method이며

rcParams 딕셔너리 접근으로 변경하는 것과 같은 결과를 가져옵니다.

 

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# Windows System의 폰트 경로
path = 'C://Windows//Fonts//NanumGothic.ttf'

font_name = fm.FontProperties(fname=path, size=30).get_name()

# matplotlib.rcParams['font.family']의 값을 변경한다.
plt.rc('font', family=font_name)

 

 

 

font_manager에서 적용해볼 수 있는 폰트 리스트를 확인할 수 있습니다.

원하는 폰트를 찾아 시도해볼 수 있습니다.

import matplotlib.font_manager as fm
select_font = fm.findSystemFonts()

for f in select_font:
    print(f)
    
 """
 C:\Windows\Fonts\GOUDOSB.TTF
C:\Windows\Fonts\GIL_____.TTF
C:\Windows\Fonts\corbell.ttf
C:\Windows\Fonts\FRABKIT.TTF
C:\Windows\Fonts\UnBatang.ttf
C:\Windows\Fonts\segoeuib.ttf
C:\Windows\Fonts\bahnschrift.ttf
C:\Windows\Fonts\BOD_PSTC.TTF
C:\Windows\Fonts\segoescb.ttf
C:\Windows\Fonts\seguibl.ttf
C:\Windows\Fonts\HANBatang.ttf
...
 """

 


변경 최종 코드

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

# Windows System의 폰트 경로
path = 'C://Windows//Fonts//NanumGothic.ttf'

font_name = fm.FontProperties(fname=path, size=30).get_name()

plt.rc('font', family=font_name)
# 또는 mpl.rcParams['font.family'] = font_name

 

 

 

 

-끝-