코딩하는 타코야끼

[Matplotlib] 한글처리 및 환경설정 본문

[T.I.L] : Today I Learned/Matplotlib

[Matplotlib] 한글처리 및 환경설정

가스오부시 2023. 5. 9. 18:53
728x90
반응형

1. matplotlib 한글처리

  • matplotlib에 설정되있는 폰트가 한글을 지원하지 않기 때문에 그래프의 한글이 깨져서 나온다.

📍 폰트깨짐 없애기. for Mac

import matplotlib.pyplot as plt  # matplotlib 설치시 혹은 터미널 시작시, 1번과 2번, 3번 명령어 입력으로 폰트깨짐 해결.(Mac 한정.)
from matplotlib import rc        # 1번
rc('font', family='AppleGothic') # 2번
plt.rcParams['axes.unicode_minus'] = False # 3번
import matplotlib.pyplot as plt
plt.plot(range(-10,10))
plt.xlabel("X값")
plt.ylabel("y값")
plt.title("matplotlib.pyplot 예제")
plt.show()


📍 설정방법

  1. 설정파일을 변경한다.
    • 한번만 하면 된다.
  2. 프로그램상에서 변경한다.
    • 프로그램이 로딩 될때마다 (노트북 파일이나 파이썬 스크립트 실행시마다) 코드를 실행해야 한다.
    • 전체 설정에서 변경하고 싶은 것을 재설정한다.

📍 OS에 설치된 폰트명 조회

import matplotlib as mpl
import matplotlib.font_manager as fm

🌓  폰트 cache 파일을 삭제 한다.

  • cache 파일 조회
  • 다음 실행 결과로 나온 디렉토리 안의 파일을 삭제한다.
print(mpl.get_cachedir())
  • 전체 폰트 조회
for f in fm.fontManager.ttflist:
    print(f.name, f.fname)  # 폰트이름, 폰트파일경로
  • 원하는 폰트명 찾기
[(f.name,f.fname) for f in fm.fontManager.ttflist if 'TrueType' in f.name.lower()]  
#mac : AppleGothic
# 설정시 폰트 이름을 사용

📍 폰트등 환경 설정하기

🌓  설정파일 변경

  • 한번만 하면 되므로 편리하다.

설정파일 경로찾기:  matplotlib.matplotlib_fname()  matplotlib 관련 전역 설정들을 찾아 바꿔준다.

  • 폰트 관련 설정

🌓  상기 본인은 이와같이 설정. (Mac)

  1. 아래 나오는 Path(mpl-data) 까지 드래후 검색
  2. 'matplotlibrc' 파일 열기.
  3. 'font.familly' 찾은 후 AppleGothic 수정 후 앞에 주석 없애기.(Mac 한정)
  4. axes.unicode 검색후 값 'True'를 'False'로 수정.
  5. 저장
print(mpl.matplotlib_fname())

🌓  함수를 이용해 설정

  •  matplotlib.rcParam['설정'] = 값  으로 변경
import matplotlib as mpl
from matplotlib import font_manager as fm

# 한글 폰트 설정
font_name = fm.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()

# 폰트변경
mpl.rcParams["font.family"] = font_name
# 폰트 size변경
mpl.rcParams["font.size"] = 20
# x, y 축의 label 크기 변경
mpl.rcParams['axes.labelsize'] = 15
# x, y 축의 tick(눈금) label 크기 변경
mpl.rcParams['xtick.labelsize'] = 12
mpl.rcParams['ytick.labelsize'] = 12

# tick의 음수기호 '-' 가 깨지는 것 처리
mpl.rcParams['axes.unicode_minus'] = False # 반드시 하는 것 (깨지는거 방지)
반응형