python 그래프 글자 깨짐 해결, 각 축 폰트 설정 다르게 하기
python에서 그래프를 그릴 때, 글자가 깨지는 현상 해결과 폰트 설정을 축 마다 다르게 하는 법을 소개하려 합니다.
python으로 그래프를 그리다 보면 한글 폰트 설정이 제대로 되어 있지 않으면
글자가 깨지는 경우가 존재합니다.
먼저 기본 설정입니다.
해당 코드를 실습할수 있는 데이터는
캐글 데이터 페이지를 통해서 다운로드 부탁드리겠습니다.
#기본 설정 및 데이터 불러오기
import warnings
warnings.filterwarnings(action='ignore')
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv("2019_kbo_for_kaggle_v2.csv")
print(data.shape)
data.head()
(1913, 37)
batter_name | age | G | PA | AB | R | H | 2B | 3B | HR | ... | tp | 1B | FBP | avg | OBP | SLG | OPS | p_year | YAB | YOPS | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 백용환 | 24.0 | 26.0 | 58.0 | 52.0 | 4.0 | 9.0 | 4.0 | 0.0 | 0.0 | ... | 포수 | 5.0 | 6.0 | 0.173 | 0.259 | 0.250 | 0.509 | 2014 | 79.0 | 0.580 |
1 | 백용환 | 25.0 | 47.0 | 86.0 | 79.0 | 8.0 | 14.0 | 2.0 | 0.0 | 4.0 | ... | 포수 | 8.0 | 5.0 | 0.177 | 0.226 | 0.354 | 0.580 | 2015 | 154.0 | 0.784 |
2 | 백용환 | 26.0 | 65.0 | 177.0 | 154.0 | 22.0 | 36.0 | 6.0 | 0.0 | 10.0 | ... | 포수 | 20.0 | 20.0 | 0.234 | 0.316 | 0.468 | 0.784 | 2016 | 174.0 | 0.581 |
3 | 백용환 | 27.0 | 80.0 | 199.0 | 174.0 | 12.0 | 34.0 | 7.0 | 0.0 | 4.0 | ... | 포수 | 23.0 | 20.0 | 0.195 | 0.276 | 0.305 | 0.581 | 2017 | 17.0 | 0.476 |
4 | 백용환 | 28.0 | 15.0 | 20.0 | 17.0 | 2.0 | 3.0 | 0.0 | 0.0 | 0.0 | ... | 포수 | 3.0 | 3.0 | 0.176 | 0.300 | 0.176 | 0.476 | 2018 | 47.0 | 0.691 |
5 rows × 37 columns
plt.figure(figsize=(20,9))
sns.boxplot(x='hand2',y="YOPS", data=data,palette="Spectral")
plt.title('타석위치 별 YOPS Boxplot',size=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('hand',size=25)
plt.ylabel('다음 시즌 OPS',size=25);
바로 아래와 같이 ㅁ로 깨짐 현상이 발생합니다.
인터넷을 찾으면 바로 나오는 것이 아래와 같은 코드입니다.
platform 라이브러리를 통해서 시스템 버전을 확인하고
폰트 이름을 보고 사용 될 폰트를 적용합니다.
from matplotlib import rc
import platform
if platform.system() == 'Windows':
rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin': # Mac
rc('font', family='AppleGothic')
else: #linux
rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False # 마이너스 기호 깨짐 현상 해결 코드
plt.figure(figsize=(20,9))
sns.boxplot(x='hand2',y="YOPS", data=data,palette="Spectral")
plt.title('타석위치 별 YOPS Boxplot',size=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('hand',size=25)
plt.ylabel('다음 시즌 OPS',size=25);
글자 이름이 깨지는 것이 해결이 되었습니다.
기본적인 폰트 경로는 C:\Windows\Fonts 이지만
간혹 경로가 다르신 경우가 있습니다.
from matplotlib import font_manager
if platform.system() == 'Windows':
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() #원하는 폰트 ttf
rc('font', family=font_name)
elif platform.system() == 'Darwin': # Mac
rc('font', family='AppleGothic')
else: #linux
rc('font', family='NanumGothic')
그러실 경우, 폰트들이 모여져 있는 경로를 찾으신 다음에
.get_name 을 사용해서 해당 폰트의 이름을 추출하는 방식으로 해결이 가능합니다.
plt.figure(figsize=(20,9))
sns.boxplot(x='hand2',y="YOPS", data=data,palette="Spectral")
plt.title('타석위치 별 YOPS Boxplot',size=30)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xlabel('hand',size=25)
plt.ylabel('다음 시즌 OPS',size=25);
마지막으로 제목, x축, y축 마다 폰트를 다르게 적용하는 방법을 소개하려고 합니다.
원하시는 폰트 경로를 fname = 로 넣으시고, 사이즈 지정도 가능합니다.
fontprop_head = font_manager.FontProperties(fname=r'C:\Windows\Fonts\H2GTRE.TTF')
fontprop_x = font_manager.FontProperties(fname=r'C:\Windows\Fonts\YES24.TTF', size = 15)
fontprop_y = font_manager.FontProperties(fname=r'C:\Windows\Fonts\HMFMOLD.TTF', size = 10)
그리고 fontproperties에 저장해두신 폰트 객체를 지정해주시면 됩니다.
다만 객체로 지정하실 때, 사이즈를 지정해두셨더라도 plt 코드 안에 사이즈 관련이 또 있다면
기존에 사이즈 지정 해두신 크기가 아닌 plt에서의 크기가 적용 됩니다.
plt.figure(figsize=(20,9))
sns.boxplot(x='hand2',y="YOPS", data=data,palette="Spectral")
plt.title('타석위치 별 YOPS Boxplot',size=30, fontproperties=fontprop_head)
plt.xticks(fontproperties=fontprop_x) #저장된 폰트 크기 15 적용
plt.yticks(fontsize=20, fontproperties=fontprop_y); #폰트 크기 20 적용