노는게 제일 좋습니다.

pandas, matplotlib에서 글꼴을 불러오지 못할 때 본문

Python/통계 및 데이터관련

pandas, matplotlib에서 글꼴을 불러오지 못할 때

노는게 제일 좋습니다. 2020. 4. 28. 01:40

요약

matplotlib의 폰트캐시가 새로 설치된 폰트를 못불러오고 있는 것이다.

아래 코드로 업데이트 해주면 된다.

import matplotlib 
matplotlib.font_manager._rebuild()

 

배경

쥬피터에서, pandas의 dataframe을 plot()으로 시각화 하려했으나, 다음의 두가지 warning을 표시하며 한글이 깨져나온다.

사용하려는 폰트는 나눔고딕코딩이다.

findfont: Font family ['NanumGothicCoding'] not found. Falling back to DejaVu Sans. /home/wonjinyi/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py:211: RuntimeWarning: Glyph 49345 missing from current font. font.set_text(s, 0.0, flags=flags)

거 NanumGothicCoding폰트가 없어서 적당한 기본폰트같은거 가져왔습니다.
근데 이거 한글 글리프가 없어서 깨져보일텐데 뭐 알아서 하십시오. 1 경고 드립니다.

(좌)입력한 코드와 표시되는 warning 2가지, (우)한글이 꺠져나오는 그래프

[datafram].plot() 메소드는 pandas에서 제공하지만, 내부적으로는 matplotlib를 로드하여 plot을 호출하게 된다.

따라서 관련 오류가 발생하는 경우, pandas자체보다는 matplotlib에 대하여 자세히 살펴볼 필요가 있다.

 

원인

OS자체 글꼴관리 도구로 보면 분명 설치되어 있는것으로 나온다.

하모니카OS의 '글꼴' 프로그램

실제로 폰트를 불러오는 개발환경 쪽에서는 어떤지 살펴보아야 한다. matplotlib에서는 font_manager라는 것을 제공하는데, 이를 이용하여 폰트가 실제로 설치되었다고 인식하는지 출력하여볼 수 있다.

from matplotlib import font_manager
for i in font_manager.fontManager.ttflist:
    if 'Nanum' in i.name:
        print(i.name, i.fname)

살펴보니 목록에 나오지도 않는 것을 볼 수 있다. 주피터를 죽였다 다시 살려보고, 아나콘다를 재실행해도 마찬가지였다.

폰트를 가져왔는데, 왜 먹지를 못하니

그렇다면 여기서, 주피터 내지는 matplotlib에서 폰트 목록을 제대로 못 받아온다는 것을 원인으로 생각할 수 있다.

 

해결

링크를 보면 같은 상황에 대하여 문답이 있다.

요약하자면, matplotlib는 아래와 같은 경로의 json파일을 통해서 글꼴목록을 관리한다. 그런데 이 json파일의 업데이트가 제대로 안 된 모양이다.

대체 왜이걸 여기다 박아놓은거야

여기에 따르면, fontlist ~~ .json파일을 업데이트 해주기 위해서는 다음과 같이 할 수 있다.

import matplotlib
matplotlib.font_manager._rebuild()

그러고 나면 제대로 폰트를 불러올 수 있다.

글씨가 깨져나오던 그래프도, 정상적으로 한글이 나오는 것을 확인할 수 있다.

 

Comments