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
요약 (※ 순서를 지키지 않으면 한글 출력이 제대로 이루어지지 않을 수 있습니다.)
- Google Colab의 노트북에서 위의 코드를 먼저 한번 실행 (폰트 설치 단계)
- 그 후 런타임 다시 시작 (설치된 폰트 적용 준비)
- 다시 위의 코드를 실행 (폰트 적용)
- 그 후 그래프 출력 코드 실행 (한글 정상 출력)
방법 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
에서 적용한 한글을 출력할 수 있도록 해줄 수 있습니다. - 혹시 진행하다가 안되거나 궁금하신 사항이 있으시면 언제든지 댓글 달아주시면 감사하겠습니다.