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
서버의 해당 파일 수정
댓글