주식투자

[파이썬 분석 부록 A1] 파이썬 그래프에 한글 사용하기 (구글 코랩, 주피터 노트북)

오렌지사과키위 2025. 4. 29. 17:44

파이썬을 활용하여 그래프를 그리다 보면, 한글을 사용하고 싶거나 사용해야 할 수 있습니다. 연재에서 영어로만 그래프를 그린 이유는 구글 코랩(Colab) 서버에 한글 글꼴이 기본으로 설치되어 있지 않기 때문입니다.

이 글에서는 구글 코랩 또는 개인 컴퓨터에 파이썬을 설치해서 사용할 때, 그래프에 한글을 나타내는 방법을 소개합니다.

코랩 그래프에서 한글 깨짐 현상

코랩 기본 설정으로 다음과 같은 한글이 포함된 그래프를 그리면, 한글이 박스 형태로 깨어져 나옵니다.

df = fdr.DataReader('069500, 114800').dropna()
df.columns = ['KODEX 200', 'KODEX 인버스']
df = df / df.iloc[0]

df.plot()
plt.axhline(1.0, ls = '--', color = 'tab:red')

plt.xlabel('날짜')
plt.ylabel('자산비')

plt.yscale('log', base = 1.1)
plt.legend(['KODEX 200$^{069500}$', 'KODEX 인버스$^{114800}$'])
plt.show()

먼저 에러 메시지가 나타납니다.

/usr/local/lib/python3.11/dist-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 45216 (\N{HANGUL SYLLABLE NAL}) missing from font(s) DejaVu Sans.
  fig.canvas.print_figure(bytes_io, **kw)
# 비슷한 에러 메시지
WARNING:matplotlib.mathtext:Font 'default' does not have a glyph for '\uc778' [U+c778], substituting with a dummy symbol.
# 비슷한 에러 메시지

기본 서체가 DejaVu Sans인데, 이 글꼴에는 한글이 정의되어 있지 않기 때문입니다. 정의되지 않은 글자는 다음과 같이 그래프에서 박스로 나타납니다.

한글이 깨진 그래프

구글 드라이브에 글꼴 업로드 후 사용

이를 해결하기 위해서는 한글을 지원하는 글꼴을 지정하면 됩니다. 먼저 사용할 글꼴을 구글 드라이브(Google Drive)에 올립니다. 아래 예에서는 fonts를 폴더를 만들어 올렸습니다. 코랩에서 구글 드라이브를 마운트 하면 글꼴을 볼 수 있습니다.

구글 드라이브에 올린 한글 글꼴

구글 드라이브에 글꼴을 올려서 사용하는 이유는 새로운 코랩 서버에 접속해도 구글 드라이브의 파일은 삭제되지 않으며, 해당 노트북 파일에서 한 번 구글 드라이브를 연결해 두면, 필요할 때 자동 연결되어 편리하기 때문입니다.

총 4개의 한글 글꼴을 올렸습니다. 순서대로 다음과 같습니다. 일부 서체는 상업용으로 사용 시 서체 사용을 사전 무료 등록하거나 사용에 대한 명기가 필요할 수 있습니다.

파일명 글꼴 이름 구할 수 있는 곳
KoPubWorld Dotum Medium.ttf KoPubWorld 돋움체 Kopub World - 한국출판인회의
NanumGothic.ttif 나눔 고딕 네이버 글꼴 모음
NanumSquareNeo-bRg.ttf 나눔스퀘어 네오 네이버 글꼴 모음
malgun.ttf 맑은 고딕 윈도우 글꼴 폴더

4개의 글꼴을 이용하여 그래프를 그려봅니다.

import matplotlib.font_manager as fm

PREFIX = '/content/drive/MyDrive/fonts/'
font_d = {}

font_d['KoPubWorld 돋움체'] = 'KoPubWorld Dotum Medium.ttf'
font_d['나눔 고딕'] = 'NanumGothic.ttf'
font_d['나눔스퀘어 네오'] = 'NanumSquareNeo-bRg.ttf'
font_d['맑은 고딕'] = 'malgun.ttf'

for ko_font_name, font_file in font_d.items():
  fm.fontManager.addfont(PREFIX + font_file)
  font_name = fm.FontProperties(fname = PREFIX + font_file).get_name()
  plt.rc('font', family = font_name)

  df.plot()
  plt.axhline(1.0, ls = '--', color = 'tab:red')

  plt.xlabel('날짜')
  plt.ylabel('자산비')

  plt.yscale('log', base = 1.1)
  plt.title(f'{ko_font_name}: {font_name}' )
  plt.legend(['KODEX 200$^{069500}$', 'KODEX 인버스$^{114800}$'])
  plt.show()

결과는 다음과 같습니다.

4가지 다른 글꼴로 한글 그래프를 그린 결과

모든 그래프에서 한글이 제대로 나타납니다. 하지만, 오른쪽에 있는 나눔 고딕과 맑은 고딕의 경우 y축 눈금에 있는 승수에 붙은 마이너스(-) 기호가 제대로 표시되지 않고 박스로 나오면서 에러 메시지가 나옵니다. 이 문제는 해결하기 쉽지 않기에 (저도 잘 모릅니다) 문제가 발생하지 않는 서체를 골라 사용하는 것이 무난합니다.

나눔스퀘어 네오를 사용하겠다면, 다음과 같은 코드를 코랩 노트북의 첫 코드 셀에 넣고, 필요할 때 실행하면 됩니다.

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

PREFIX = '/content/drive/MyDrive/fonts/'
ko_font_path = PREFIX + 'NanumSquareNeo-bRg.ttf'
fm.fontManager.addfont(ko_font_path)
font_name = fm.FontProperties(fname = ko_font_path).get_name()
plt.rc('font', family = font_name)

정리하며

구글 코랩에서 그래프를 그릴 때 한글을 사용하는 방법을 살펴보았습니다. 개인 컴퓨터에 파이썬을 설치해서 사용하는 경우에도 동일한 방식을 적용할 수 있습니다.

참고: 연재와 관련한 질문은 댓글로 남겨주시기 바랍니다. 답변을 드리거나 이후 연재에서 다룰 수 있도록 노력하겠습니다.

참고 서적: 왜 위험한 주식에 투자하라는 걸까? - 장기 투자와 분산 투자에 대한 통계학적 시각

연재 목록: 자산 배분 분석 방법 책 소개, 연재글 및 사례 모음 [목록]

함께 읽으면 좋은 글 (최신 글)

  1. [중급 17] 분산 투자에 의해 수익률 분포는 어떻게 바뀔까? (제일야옹이즈와 삼삼뱀뱀즈의 우승 확률과 갑돌이의 해외여행)
  2. [파이썬 분석 22] 고정 금액 인출식 성과를 인플레이션을 고려해서 추정해 보자
  3. [파이썬 분석 21] 적립식 성과를 인플레이션을 고려해서 추정해 보자
  4. [파이썬 분석 20] 인플레이션을 고려해 보자 (한국은행 소비자물가지수 데이터 사용)
  5. [파이썬 분석 19] 관계의 안정성을 살펴보자 (상관 계수 변화를 통한 관찰)

함께 읽으면 좋은 글 (인기 글)

  1. 챗GPT(ChatGPT)로 사진을 지브리 만화 스타일로 변환하기
  2. 구글 제미나이(Gemini)를 이용한 그림 생성하기 (vs. 마이크로소프트 이미지 크리에이터의 이미지 생성 AI)
  3. 스튜디오 지브리 만화 스타일로 그림 그리기 (구글 제미나이 + ImageFX)
  4. 스튜디오 지브리 만화 스타일로 그림 그리기 (구글 제미나이)
  5. 챗GPT(ChatGPT)로 사진을 지브리 vs 이누야샤 만화 스타일로 변환한 사례 비교 (인물 사진 #3)
도움이 되었다면, 이 글을 친구와 공유하는 건 어떻까요?

facebook twitter kakaoTalk naver band