본문 바로가기
개발이슈

[python] python matplotlib 한글 깨짐 (리눅스)

by 제2의지니 2022. 1. 7.

Python matplotlib 한글 깨짐 문제

 

문제 : plot chart에서 한글 깨짐

 

한글 깨짐

원인: 리눅스 서버에 한글 폰트 지원하는 글꼴이 설치 되지 않았기 때문.

 

해결방법 : root 권한 필요

 

- 한글 지원 폰트 다운로드

 

# 나눔 폰트 다운로드
curl -o nanumfont.zip http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip

#폰트 경로로 파일 이동
mv nanumfont.zip /usr/share/fonts/

cd /usr/share/fonts/nanum

압축 해제 폰트 리스트



#폰트 압축 파일 풀기
unzip nanumfont.zip -d NanumFont

# zip 파일 삭제 
rm -f nanumfont.zip 

#폰트 캐시 갱신
fc-cache -f -v

 

# import

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

# 한글 폰트 사용시 마이너스 깨지는 문제 
matplotlib.rcParams['axes.unicode_minus'] = False

# matplotlib 버전 확인

print(matplotlib.__version__)

# matplotlib 폰트 캐쉬 저장된 경로 

matplotlib.get_cachedir()

캐쉬 저장된 경로
해당 경로의 파일

- fontlist-v330.json 삭제

 

#  캐쉬 rebuild

matplotlib.font_manager._rebuild()

# 나눔 폰트 폰트매니저 적용 확인 - 리스트 가져오기

for i in fm.fontManager.ttflist:
    if 'Nanum' in i.name:
        print(i.name, i.fname)

방법 1. matplotlib.rc에 폰트 지정

- plot 차트에 전역으로 폰트 적용


#설정 되어있는 폰트 사이즈
print(matplotlib.rcParams['font.size'])
#설정 되어있는 폰트 글꼴
print(matplotlib.rcParams['font.family'])

 

#폰트 경로
font_path = "/usr/share/fonts/nanum/NanumGothicBold.ttf"
 
#폰트 이름 얻어오기
font_name = fm.FontProperties(fname=font_path).get_name()
 
plt.rcParams["font.family"] = font_name
plt.rcParams["font.size"] = 15
plt.rcParams["figure.figsize"] = (14,5)
plt.plot([1,2,3,4])
plt.xlabel("시간")
plt.ylabel("거리")
plt.show()

방법 2. Fontproperties 사용하는 방법

- 차트 지정 항복에만 해당 폰트 적용

적용가능한 항목 : 

matplotlib.pyplot : title(), xlabel(), ylabel(), legend(), text()

 

matplotlib.axes : set_title()

fontprop = fm.FontProperties(fname="/usr/share/fonts/nanum/NanumGothic.ttf", size=15)
plt.title('시간당 판매량', fontproperties=fontprop)
plt.ylabel('판매 개수', fontproperties=fontprop)
plt.xlabel('시간(분)', fontproperties=fontprop)
plt.show()

방법3. rcParams를 설정파일에 설정해 주는 방법 

- 모든 노트북에 공통으로 적용 

# 설정 파일 경로
matplotlib.matplotlib_fname()

>> /home/jy/.local/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

서버의 해당 파일 수정

댓글