[Python/matplotlib] 한글 폰트 깨짐 해결하기
문제 상황: matplotlib 사용 시 한글 깨짐.
EDA 데이터 시각화 블로깅을 하면서 matplotlib를 사용했을 때 한글 깨짐 현상이 발생했습니다.
원인 파악: matplotlib의 기본 폰트가 한글을 지원하지 않음.
한글 깨짐은 대부분 matplotlib의 기본 폰트가 한글을 지원하지 않기 때문에 발생합니다. 위키백과를 참고해보면 해당 폰트는 획의 삐침이 없는 글씨체로 한글의 돋움체, 고딕체에 해당하며, 한글을 위한 폰트가 아닙니다. 아래 코드를 사용하면 matplotlib에서 사용할 폰트를 확인할 수 있습니다.
import matplotlib.pyplot as plt
plt.rcParams['font.family']
# ['sans-serif']
문제 해결
한글을 지원하지 않는 폰트를 사용한 것이 문제였으니 한글을 지원하는 폰트를 사용하면 문제를 해결할 수 있습니다.
사용 가능한 폰트 이름 확인하기
우선 사용 가능한 폰트의 이름을 확인하는 방법입니다. 폰트를 설정하기 위해 폰트 파일의 url을 사용하는 방법도 있지만 환경이 바뀔 때마다 url을 찾기는 번거로우니 사용할 수 있는 폰트를 찾고 바로 선언하는 것이 저는 편하더라구요. 윈도우OS는 기본적으로 '맑은 고딕(Malgum Gothic)'이 있을테니 바로 설정해서 사용하는 것도 방법입니다.
import matplotlib.font_manager as fm
# 시스템에서 사용할 수 있는 모든 폰트 리스트 가져오기
font_list = fm.findSystemFonts(fontpaths=None, fontext='ttf')
# 폰트의 이름을 추출하여 리스트로 저장
font_names = [fm.FontProperties(fname=font).get_name() for font in font_list]
# 중복 제거 및 정렬
font_names = sorted(set(font_names))
# 폰트 이름 출력: 고딕 폰트만 찾기 예시
for font_name in font_names:
if 'GOTHIC' in font_name.upper():
print(font_name)
1. rcParams
rcParams를 사용해 폰트를 직접 설정해서 사용할 수 있습니다.
import matplotlib.pyplot as plt
plt.rcParams['font.family'] ='Malgun Gothic'
2. rc
1번처럼 1줄로 사용할 수 있는 코드입니다. 손에 익는 코드를 사용하면 됩니다.
import matplotlib.pyplot as plt
plt.rc('font', family = 'Malgun Gothic')
3. 직접 폰트 url 적용
폰트 파일의 url을 사용해 직접 폰트를 설정하는 방법입니다.
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 폰트 파일의 url
font_path = '폰트 파일 URL'
# 폰트 이름 가져오기
font_name = fm.FontProperties(fname=font_path).get_name()
# 폰트 설정하기
plt.rc('font', family=font_name)
# plt.rcParams['font.family'] = font_name
번외: 폰트 적용 시 마이너스 부호가 깨질 때 해결 방법
폰트를 변경했을 때 마이너스 부호가 깨질 수 있습니다. matplotlib에서는 음수를 표현할 때 유니코드 마이너스 기호를 사용하기 때문인데요. 유니코드 마이너스 부호를 사용하지 않고 하이픈(-) 기호를 사용하도록 설정하는 코드를 사용해 해결할 수 있습니다.
import matplotlib.pyplot as plt
# 폰트 설정
plt.rcParams['font.family'] ='Malgun Gothic'
# 유니코드 마이너스 사용하지 않도록 설정 → 하이픈 사용
plt.rcParams['axes.unicode_minus'] = False