조금씩 꾸준히 완성을 향해

[Matplotlib] Google Colab 한글 깨짐 (최후의 해결책) 본문

Python/데이터 시각화

[Matplotlib] Google Colab 한글 깨짐 (최후의 해결책)

all_sound 2022. 9. 29. 23:24

 

이 포스팅을 찾아 들어왔다면 이미 여러 방법들을 많이 시도해 봤을 거라 생각한다. 나 역시 검색을 꽤 오래 해봤고, 여러 코드들을 실행해 봤다.  

 

 

 

특정 폰트를 지정해 주는 방법이 몇몇 있었는데 대표적인 해결 코드는 아래와 같았다.

from matplotlib import font_manager, rc
font_path = "/content/drive/MyDrive/ Encore Prac/malgun.ttf" # 폰트파일의 위치
mg = font_manager.FontProperties(fname=font_path)
font_name = mg.get_name()
rc('font', family=font_name)
!apt-get update -qq
!apt-get install fonts-nanum* -qq

import matplotlib.font_manager as fm
import warnings
warnings.filterwarnings(action='ignore') 

path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf' # 폰트 위치
font_name = fm.FontProperties(fname=path, size=10).get_name() # 기본 폰트 사이즈 : 10
plt.rc('font', family=font_name)
fm._rebuild()
plt.rc('font', family='Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False

 

 

그러나 그 어떤 셋팅도 내 Colab 환경을 변화시키지 못했다.

 

 

내가 찾은 최후의 해결책은 바로 함수 안에 속성으로 폰트를 일일히 지정해 주는 것이었다.

from matplotlib import font_manager, rc
font_path = "/content/drive/MyDrive/ Encore Prac/malgun.ttf" # 폰트파일의 위치
mg = font_manager.FontProperties(fname=font_path)

먼저 이 코드를 실행해 mg 변수에 특정 폰트를 저장해 준다. 

 

그리고 fontpropertis=mg 라는 속성을 한글이 들어가는 함수 안에 집어 넣어 준다. fontsize 속성을 통해 글자 크기를 조정할 수도 있다. 

plt.figure(figsize=(14,5)) #가로 사이즈 늘리기 
plt.style.use('seaborn-colorblind') #스타일 서식 지정
plt.plot(sr_one.index, sr_one.values) 
plt.title('서울 -> 경기 인구 이동' ',fontproperties=mg, fontsize=20) #제목 지정, 폰트사이즈 설정
plt.xlabel('기간',fontproperties=mg, fontsize=15) #x축 지정
plt.ylabel('이동 인구수', fontproperties=mg, fontsize=15) #y축 지정
plt.xticks(rotation=70) #축 70도 회전
plt.show()

이제 이렇게 잘 출력되는 것을 볼 수 있다. 

 

일일히 폰트사이즈를 설정하는 게 귀찮다면 이렇게 사이즈마다 따로 변수를 생성해서 사용할 수 있다.

mg_30 = font_manager.FontProperties(fname='/content/drive/MyDrive/ Encore Prac/malgun.ttf', size=30)
mg_20 = font_manager.FontProperties(fname='/content/drive/MyDrive/ Encore Prac/malgun.ttf', size=20)
mg_15 = font_manager.FontProperties(fname='/content/drive/MyDrive/ Encore Prac/malgun.ttf', size=15)
mg_10 = font_manager.FontProperties(fname='/content/drive/MyDrive/ Encore Prac/malgun.ttf', size=10)

 

그러면 조금 더 짧고 간단하게 폰트 지정이 가능하다. 

plt.title('서울 -> 경기 인구 이동' ',fontproperties=mg, fontsize=20)
plt.title('서울 -> 경기 인구 이동' ',fontproperties=mg_20)

 

 

 

또 한가지 주의해야 할 점은 범례에 사용되는 폰트 속성은 나머지와 좀 다르다. 

 

plt.legend(['서울->경기'],loc='best',prop=mg_20)

이렇게 fontproperties 대신에 prop 라고 속성을 바꿔줘야 무사히 작동한다. 

 

 

사실 이 방법은 너무너무 귀찮고 손이 많이 가고 코드도 길어지는 방법이라 좀 슬프긴 하다.

추후에라도 내 개발 환경에 잘 적용되는 방법을 꼭 찾고 싶다. 

 

혹시라도 해결하신 분이 있다면 댓글을 꼭 달아주길.....플리즈..