본문으로 바로가기

matplotlib 한글 문제 해결하기

category Theory/DataScience 2020. 7. 20. 08:00

이번에는 우리가 데이터 사이언스나 머신러닝을 공부하면서 많이 사용하는 Python의 그래프 그리는 툴인 matplotlib의 한글 문제를 이야기하겠습니다.

일단 먼저 matplitlib와 numpy를 불러보겠습니다~

그리고 간단하게 t를 0.부터 10까지 0.01간격으로 지정하고, sin과 cos을 numpy를 이용해서 그리라고 하고~, 타이틀을 "삼각함수"라고 지정했습니다

그랬는데 에러가 나네요.ㅠㅠ. font에 뭔가 문제가?

import matplotlib.pyplot as plt
%matplotlib inline

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

f_path = "/Library/Fonts/Arial Unicode.ttf"
font_name = font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

네~ matplotlib의 폰트가 한글을 기본지원하지 않는 것이 디폴트로 잡혀있어서 그렇습니다. 그래서 한글이 지원되는 폰트를 따로 지정해주면 됩니다. 윈도우 유저들은 f_path자리를

f_path = "c:/Windows/Fonts/malgun.ttf"

이렇게 설정하면 됩니다.

그리고 다시 실행해보면 이렇게 한글이 잘 지원된다는 것을 알 수 있습니다. 그런데 매번 이렇게 코드를 작성하는 것이 조금 귀찮다면

import matplotlib.pyplot as plt
import platform
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    f_path = "/Library/Fonts/Arial Unicode.ttf"
elif platform.system() == 'Windows':
    f_path = "c:/Windows/Fonts/malgun.ttf"

font_name = font_manager.FontProperties(fname=f_path).get_name()
rc('font', family=font_name)

print("Hangul font is set!")

hangul_font.py 파일을 하나 만들어서 위와 같이 해둡니다. 이번에는 platform 모듈의 system() 함수까지 이용해서 맥(Darwin)과 윈도우 모두에 통하도록 만들어 둡니다.

그리고, 내가 실행하고자 하는 Jupyter Notebook 파일과 같은 경로에 두고~

같은 경로에 둔거죠~^^

그리고 import 해버리면 됩니다~

그래도 역시 잘 되는군요^^ 요즘 데이터사이언스 부분은 제가 계속 그렇게 하듯 동영상으로도 올려둡니다.



댓글을 달아 주세요

  1. BlogIcon 북두협객 2020.07.20 11:17

    관리자의 승인을 기다리고 있는 댓글입니다

  2. BlogIcon 모피우스 2020.07.20 13:03

    관리자의 승인을 기다리고 있는 댓글입니다

  3. BlogIcon 드래곤포토 2020.07.20 16:32

    관리자의 승인을 기다리고 있는 댓글입니다

  4. BlogIcon 핑구야 날자 2020.07.21 06:47

    관리자의 승인을 기다리고 있는 댓글입니다

  5. BlogIcon 가족바라기 2020.07.21 22:55

    관리자의 승인을 기다리고 있는 댓글입니다

  6. BlogIcon peterjun 2020.07.22 10:11

    관리자의 승인을 기다리고 있는 댓글입니다

  7. BlogIcon 잉여토기 2020.07.28 16:31

    관리자의 승인을 기다리고 있는 댓글입니다

  8. BlogIcon p2p 순위 2020.08.01 11:29

    관리자의 승인을 기다리고 있는 댓글입니다