▼2020년/주피터 노트북

주피터 노트북(Jupyter notebook) - Matplotlib 한글 깨짐 현상 해결

ITISIK 2020. 10. 6. 22:23
반응형
plt.figure().add_subplot().set_title('한글 제목 테스트 Plot')
plt.plot(x, y)​

Sign_Plot.ipynb
1.39MB

문제현상

  주피터 노트북에서 Matplotlib 패키지를 이용하여 그래프를 그려낼 때, 범례나 축, 제목(title)등에서 한글을 사용하면 한글이 깨져서 나타나게 된다. 아래의 스크린 샷을 참고하자. + 마이너스 기호 깨짐 현상

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
x = np.arange(-5, 5, 0.01)
y = np.sin(x)

한글 폰트 다운로드

  결론부터 말하자면, 기본적으로 할당된 폰트가 한글을 지원하는 폰트가 아니기 때문에 이런 현상이 벌어지는 것이다. 적용가능한 한글 폰트를 설치해주자. 필자는 네이버에서 배포한 나눔고딕 폰트를 적용하고자 한다. [네이버에서 배포하는 폰트 다운로드 공식 홈페이지]

 

[네이버 한글한글 아름답게 : 나눔글꼴]

한글의 아름다움, 나눔글꼴로 나눕니다.

hangeul.naver.com

  폰트 다운로드 및 설치는 지면상 생략하겠습니다. 네이버 나눔 고딕를 다운로드 받고, 폰트 설치를 했다는 가정하에 진행합니다.

 

적용을 희망하는 폰트의 영어이름 알아내기

  폰트를 설치하면, 해당 폰트의 고유 이름으로 설치가 되게 된다. 시스템 상에서 사용되는 그 폰트명을 알아야 설정파일에 적용이 가능함으로, 폰트의 이름을 알아내기 위해서 주피터 노트북에서 아래의 코드를 통해 해당 PC에 설치되어 있는 폰트 리스트를 모두 불러온다.

import matplotlib.font_manager as fm
font_list = fm.findSystemFonts(fontpaths = None, fontext = 'ttf')
font_list[:]

  이제 우리가 등록하려고 했던 나눔 고딕 폰트를 찾기 위해서 Ctrl + F키를 누르고 nanum이라는 키워드를 입력하여 찾아본다.

  나눔고딕의 영어이름은 NanumGothic 인것을 알아냈다. 이제 이 폰트를 설정파일에 적용하여 주피터 노트북 상에서 언제든지 Matplotlib에서 한글이 잘 출력되도록 설정하자.

 

 

한글 폰트 영구 등록

  이 방법은 주피터 노트북을 실행할 때마다 일일이 수동으로 적용하지 않고 자동으로 지정한 폰트가 모든 주피터 노트북에서 반영되도록 하는 방법이다. 설정파일에 약간의 수정을 해주어야 하므로, 설정파일의 위치를 먼저 알아야 한다. 아래의 코드를 통해 설정파일의 경로를 알아내자.

##설정 파일 위치
print (mpl.matplotlib_fname())



 

위 경로에 위치한 matplotlibrc 파일이 바로 설정파일이다. 메모장이나 워드패드로 열어주자.

 

 

마찬가지로 Ctrl + F를 통해서 font.family를 찾으면 몇 가지가 나오는데, 그중에

#font.family : sans-serif

 

라고 되어 있는 부분을 찾자. 그리고 위 사진과 같이 변경하면 된다.(아래 코드라인 참조)

font.family : NanumGothic

 

  이로써 한글을 지원하는 폰트 적용이 완료되었다. 하지만 끝이 아니다. 그 이유는 이대로 plot을 다시 그려보시면 알게될텐데, 음수일때 표현되는 -가 깨져보이기 때문이다. 그 마이너스 기호를 정상적으로 나타내기 위해서 설정파일 한 군데를 더 고쳐야 한다.

 

  해당 설정파일에서 Ctrl + F를 통해서 axes.unicode_minus를 찾으면 딱 한 가지가 나오는데 그 부분을 아래 스크린 샷처럼 수정해줘야 한다.



 

  원래는 아래의 코드라인처럼 나타나 있었을 것이다.

#axes.unicode_minus  : True ## use unicode for the minus symbol​

  이것을 위 사진과 같이 변경하면 된다. (아래 코드라인 참조)

axes.unicode_minus  : False ## use unicode for the minus symbol

  뒤에 따라 붙는 주석까지 그대로 보존할 필요는 없는데, 그래도 필자는 원본을 크게 망가트리는 것이 싫어서 그대로 유지했다.

 

  이로써 Matplotlin에서 한글이 깨지는 현상과 마이너스 기호가 깨지는 현상을 완벽히 해결하였다. 이제 다시 plot을 그려보고 문제 해결을 눈으로 확인하는 것으로서 글을 마치려고 한다.

 

 

더 이상 깨지지 않고 완벽하게 나온다.

 

끝.

반응형