목차
파이썬 프로그래밍 중에 그래프 표출을 위해 matplotlib 라이브러리를 많이 사용합니다. 데이터 칼럼명이 영어라면 별 문제없겠지만 한글로 작성된 데이터 셋이라면 matplotlib에서 ㅁㅁ로 나타나는 현상이 있습니다. mapltplotlib에서 한글 깨짐이 없게 하려면 font 세팅을 별도로 해 주어야 합니다.
1. 한글 깨짐 현상을 위한 데이터 셋 구성
한글 깨짐 현상에 대한 해결을 위해 임의의 데이터 셋을 만들어 볼게요. 우선 아래와 같이 필요한 라이브러리를 임포트 합니다.
import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt
이젠 데이터 셋을 구성하기 위한 함수를 추가하는데 해당 함수는 임의의 개수에 대해 임의의 데이터를 생성하게 됩니다. 추후 다른 랜덤 데이터를 만들어 낼 때 유용하게 사용할 수 있으며 값의 크기는 스케일링 조정을 통해 변경할 수 있습니다.
def random_num(row_no):
mean = random.random()
std = random.random()
data = list(np.random.normal(mean, std, row_no))
return data
해당 함수의 input 인자로 'row_no'을 넣게 되는데 이는 데이터의 개수를 의미합니다. row_no = 100 이면 len(data)가 100개라는 의미입니다.
cols = ['영희', '철수', '길동', '임당']
data = pd.DataFrame(columns=cols)
column의 항목들이 한글로 구성되게 cols의 값을 모두 한글로 작성하였습니다. 이 cols을 이용하여 data라는 dataframe을 선언했습니다.
for i in range(len(cols)):
rand_data = random_num(100)
data[cols[i]] = rand_data
data의 각 칼럼에 random_num 함수에서 생성한 100개 길이의 데이터를 집어넣습니다.
fig, ax = plt.subplots(4, 1, sharex=True)
for i in range(len(ax)):
ax[i].set_title(data.columns[i])
ax[i].plot(data[data.columns[i]])
ax[i].grid()
plt.show()
2. Matplotlib의 한글 폰트 적용
위에서는 subplots를 이용하여 각 칼럼의 데이터를 가시화하였습니다. set_title을 통해 각 칼럼명을 서브 그래프의 타이틀로 나타냈으나 한글 폰트가 적용이 되지 않아 ㅁㅁ로 나타났습니다. 이제부터 폰트 지정을 통해 한글이 제대로 나타나게 해 보겠습니다.
from matplotlib import font_manager, rc
font_path = 'C:\\Windows\\Fonts\\NGULIM.TTF'
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)
import 영역에 위의 코드를 붙여 넣으면 matplotlib에서의 한글 폰트 설정이 적용됩니다. font_path의 경로를 잘 살펴보면 'C' 경로 밑에 'Windows' 아래 폰트 경로가 있습니다. 이는 윈도우 OS 환경에서 적용되는 코드입니다. 맥 OS에서는 물론 설정 에러가 발생할 겁니다. 맥은 별도의 폰트 경로가 없기 때문에 font_path를 사용할 필요가 없습니다. 아래 코드를 참고하세요
from matplotlib import rc
rc('font', family='AppleGothic')
family에 자신이 알고 있는 한글 폰트명을 입력하게 되면 모든 게 완료됩니다.
3. 마치며
파이썬의 matplotlib 라이브러리 사용에 있어 한글 폰트 설정하는 방법에 대해 포스팅을 해 보았습니다. 해당 포스팅에서는 window os와 mac os 두 가지 버전에 대해 모두 설명을 했으며 추가로 임의의 데이터를 생성할 수 있는 함수까지 작성해 보았습니다. 사실 폰트 설정의 코드야 한 두 줄이면 금방 설명이 됩니다만, 늘 그렇듯 우리는 데이터 셋을 쉽게 구할 수 없는 상황이다 보니 매번 데이터 셋 구성 프로그램까지 같이 설명하게 되는 점 양해 바랍니다.
댓글