우분투에서 matplotlib 한글폰트 사용(feat. 'Font family [] not found.')

데이터 여행자·2021년 2월 27일
0

추가 학습

목록 보기
4/7
post-custom-banner

우분투에서 matplotlib을 이용하여 그래프를 그릴 때, 한글 폰트를 사용하면 아래와 같이 한글이 깨져서 나온다.

노트북에서 한글 폰트 지정하는 법

matplotlib에서 한글 폰트를 사용하는 방법은 3가지가 있다.

  1. 텍스트 출력시마다 폰트 특성을 지정한다.
  2. 전역으로 지정한다.

만약 위의 방법을 사용하고 싶다면 여기에 설명이 자세히 나와 있으니 참고하면 된다.

rcParams를 설정파일에 직접 적어주는 방법

그러나 나는 matplotlib을 사용할 때마다 폰트를 지정하는 것이 번거롭다고 생각해서 rcParams를 설정파일에 직접 적어주는 방법을 사용하고 싶었다. 그 방법은 다음과 같다.

  1. 먼저 터미널을 킨다.

  2. nunum 폰트를 설치하고 캐시를 제거한다. (우분투에는 2012년부터 nanum 폰트가 설치되어 있다는 이야기가 있다. 그러나 만약 폰트가 설치되지 않았다면 아래의 방법으로 설치한다.)

$ sudo sudo apt-get install fonts-nanum*
$ sudo fc-cache -fv

nanum 폰트가 설치되어 있어 있는지 확인하고 싶다면 쥬피터 노트북에서 아래의 코드를 각각 실행해본다.

ls -l /usr/share/fonts/truetype/
ls -l /usr/share/fonts/truetype/nanum/
  1. 폰트 기본 세팅을 '나눔고딕체', 폰트 크기 '15'로 설정한다. (원하는 폰트로 변경해도 된다.)
$ echo 'font.family : NanumMyeongjo' >> ~/.config/matplotlib/matplotlibrc
$ echo 'font.size : 15.0' >> ~/.config/matplotlib/matplotlibrc

원하는 글꼴 이름은 다음과 같이 찾을 수 있다.

import matplotlib.font_manager
[f.name for f in matplotlib.font_manager.fontManager.ttflist if 'Nanum' in f.name]
  1. 제대로 설정이 되었는지 확인해 본다.
 $ cat  ~/.config/matplotlib/matplotlibrc
  1. 쥬피터 노트북을 껐다가 다시 시작해서 변경이 되었는지 확인해 본다. (아래의 코드부터는 쥬피터 노트북에서 실행한다.)
 print(plt.rcParams['font.family'] )
  1. matplotlib에서 한글 폰트가 잘 나오는지 확인해 본다.
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
plt.title("한글설정이 잘되었는지?")
plt.show()

'Font family [] not found.' 해결 방법

그런데 나의 경우에는 6번을 실행하면 'Font family [] not found. Falling back to DejaVu Sans'라는 경고문이 뜨면서 한글 폰트가 여전히 깨져서 나왔다. 이 문제를 해결하기 위해서 수많은 블로그를 돌아다니다가 왜 이렇게 되는지 이유와 그 해결 방법을 찾을 수 있었다.

  1. 먼저 쥬피터 노트북에 다음의 코드를 실행한다.
from matplotlib import font_manager
for i in font_manager.fontManager.ttflist:
    if 'Nanum' in i.name:
        print(i.name, i.fname)

결과가 '[]'로 나온다면 Nanum 폰트 목록을 제대로 받아오지 못하는 것이다.

  1. 아래의 코드로 업데이트해준다.
import matplotlib
matplotlib.font_manager._rebuild()
  1. 1번을 다시 실행한다.

2번의 코드 1줄을 써주었더니 바로 한글 폰트가 나왔다. 위의 코드는 폰트를 관리하는 json 파일을 업데이트해주는 것이다. 즉 나의 경우에는 폰트를 관리하는 json 파일이 제대로 업데이트되지 않아서 Nanum 폰트 목록을 받아오지 못했던 것이다.

한글 폰트 깨짐 문제로 한동안 고생했다. 하지만 이제 방법을 알았으니 같은 문제가 발생하면 바로 해결할 수 있다.

참고한 사이트:
matplotlib + 한글 (Ubuntu Linux)
우분투 18.04에서 파이썬 matplotlib 한글설정 방법
pandas, matplotlib에서 글꼴을 불러오지 못할 때

post-custom-banner

0개의 댓글