[Python] Colab 에서 matplotlib 한글 폰트 정상 출력시키는 코드
Coding Note

[Python] Colab 에서 matplotlib 한글 폰트 정상 출력시키는 코드

matplotlib를 통한 한글 정상 출력 방법 (in colab)

Colab 상에서 matplotlib를 통한 시각화를 할 때 한글 폰트를 정상 출력하기 위한 방법을 두 가지로 설명드리겠습니다. 방법 1.방법 2.는 같은 방식이지만 차이점은 코드로 런타임 재시작을 수행하냐, 노트북의 도구 메뉴를 이용하여 런타임 재시작을 하냐의 차이입니다. 편하신 대로 사용하시면 되겠습니다. 저도 기존에는 방법 1.을 통해 한글 폰트를 설치하고 적용하였지만 방법 2.를 알고나서부터는 방법 2.로 한글 폰트를 적용해주고 있습니다. 

 

방법 1. 

설명

먼저 아래의 코드를 실행한 후, Notebook의 런타임 메뉴에서 런타임 다시 시작 클릭으로 런타임 재시작을 진행합니다. (런타임 다시 시작이라는 경고 문구가 떠도 를 클릭합니다.) 그 후 또 한 번 아래의 코드를 실행하여 폰트를 적용해줍니다. 이제 matplotlib.pyplot을 통한 시각화에서는 한글 폰트가 정상 출력된 모습을 볼 수 있을 것입니다.

 

코드

# 한글폰트 사용 in colab
%matplotlib inline  

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

!apt-get update -qq
!apt-get install fonts-nanum* -qq

path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf' 
font_name = fm.FontProperties(fname=path, size=10).get_name()
print(font_name)
plt.rc('font', family=font_name)

fm._rebuild()
mpl.rcParams['axes.unicode_minus'] = False

요약 (※ 순서를 지키지 않으면 한글 출력이 제대로 이루어지지 않을 수 있습니다.)

  1. Google Colab의 노트북에서 위의 코드를 먼저 한번 실행 (폰트 설치 단계)
  2. 그 후 런타임 다시 시작 (설치된 폰트 적용 준비)
  3. 다시 위의 코드를 실행 (폰트 적용)
  4. 그 후 그래프 출력 코드 실행 (한글 정상 출력)

 

방법 2. 

설명

방법 2.는 위의 방법 1. 과 코드 실행 내용은 동일하지만 다른 점은 런타임 다시 시작을 코드로 진행한다는 점입니다. 아래의 코드 1, 코드 2, 코드 3을 차례로 실행해주면 됩니다. 세 블록을 한 번에 실행한다고 해도 코드 2가 실행되면서 런타임 다시 시작이 진행되기 때문에 코드 3을 한번 더 따로 실행해주셔야 합니다. 

 

코드 1

# 단계 1: 폰트 설치
import matplotlib.font_manager as fm

!apt-get -qq -y install fonts-nanum > /dev/null
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
fm._rebuild()

코드 2

# 단계 2: 런타임 재시작
import os
os.kill(os.getpid(), 9)

코드 3

# 단계 3: 한글 폰트 설정
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm

# 마이너스 표시 문제
mpl.rcParams['axes.unicode_minus'] = False
	
# 한글 폰트 설정
path = '/usr/share/fonts/truetype/nanum/NanumGothicBold.ttf'
font_name = fm.FontProperties(fname=path, size=18).get_name()
plt.rc('font', family=font_name)
fm._rebuild()

요약

코드 1, 코드 2, 코드 3을 차례로 실행시켜 줍니다. 코드 2가 실행되고 난 후에는 런타임이 다시 시작되기 때문에 한번에 세 개의 코드를 실행시켜놓았다면 코드 2에 의해 실행이 취소되고 런타임이 다시 시작됩니다. 따라서 코드 3을 따로 또 실행해주셔야 합니다.

 

주의 사항

  • 한글 폰트가 계속 깨져서 나오는 경우에 혹시 seaborn을 이용한 시각화가 아니었는지 체크 바랍니다. 그럴 경우에는 seaborn 시각화 코드가 있는 셀 제일 아랫부분에 plt.show() 함수를 사용하여 matplotlib에서 적용한 한글을 출력할 수 있도록 해줄 수 있습니다.
  • 혹시 진행하다가 안되거나 궁금하신 사항이 있으시면 언제든지 댓글 달아주시면 감사하겠습니다.