코딩

파이썬 그래프에 한글 제목과 범례 사용하는 법

Bella0204 2020. 12. 18.

오늘 목표

지난 포스팅에서 연속적인 엑셀 데이터를 이용하여 평균과 표준편차를 나타내는 라인 그래프를 그렸었는데요. 오늘은 그 데이터와 그래프를 그대로 가져와서 한글로 차트 제목, 축 제목을 나타내는 법을 알아보도록 하겠습니다. 아래와 같은 그래프를 만드는 것이 오늘 목표입니다. 

 

 

 

 

 

한글 사용 위한 라이브러리 가져오기

 

아래와 같이 라이브러리를 가져옵니다. 

import matplotlib
from matplotlib import font_manager,rc  #한글 폰트 입력을 위한 라이브러리
import matplotlib.pyplot as plt   #그래프 그리기 위한 라이브러리
%matplotlib inline  

 

 

한글 저장 경로 가져오기

 

 

폰트는 보통 아래 경로에서 확인 할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

가져오고 싶은 한글 폰트를 선택한 후 마우스 오른쪽 클릭해서 속성으로 들어가면 폰트명과 확장자명이 나옵니다.

그걸 아래 코드에서 폰트 저장 경로 뒤에 붙여주면 됩니다.  

 

 

 

 

 

 

 

 

 

 

 

 

아래 첫 번째 줄 코드만 내 컴퓨터 한글 저장 경로와 내가 원하는 한글 폰트를 가져와 수정해 주면 되고, 나머지 두 줄의 코드는 그대로 쓰면 됩니다. 제가 가져오고 싶은 한글 폰트는 gulim.ttc 이라서 경로 뒤에 붙여 줬습니다. 

#폰트 경로 가져오기
font_path = 'C:/Windows/Fonts/gulim.ttc'
 
#폰트 이름 얻어오기
font_name = font_manager.FontProperties(fname=font_path).get_name()
 
#폰트 설정하기
matplotlib.rc('font',family=font_name)

 

 

표준편차 라인 그래프 그리기

plt.errorbar를 이용하여 표준편차 표시된 라인 그래프를 그려 보겠습니다.  

 

x = [1,2,3] # x 축
y= [7,4,10] # y 축
yerr = [1,1,2] # y 축 표준편차

plt.errorbar(x,y,yerr, c='black', marker='o', mfc='red',
         mec='salmon', ms=5, mew=4)

plt.xlabel('시간', fontsize = 12)
plt.ylabel('속도', fontsize = 12)
plt.title('파이썬 그래프에 한글 폰트 사용하기', fontsize = 20, color ='red')

 

 

위의 코드를 실행 시켜 축 제목과 차트 제목을 한글로 입력 해봤습니다. 

 

 

 

 

 

 

 

 

 

 

표준편차 바 그래프 그리기

 

ax.bar를 이용하여 표준편차가 플러스 방향만 있는 막대(바) 그래프를 그려보겠습니다. 

만약에 플러스 마이너스 표준편차를 표시 하고 싶으면 아래 코드에서 yerr =[1,1,2]로 표시하면 됩니다. 

fig, ax = plt.subplots()
x = [1,2,3]
y= [7,4,10]
yerr = [(0,0,0,),(1,1,2)] #플러스 표준편차만 표시하기

ax.bar(x,y,yerr=yerr, align='center', color = ('red','navy','grey'), alpha=1,
       edgecolor = 'black',ecolor= 'black',capsize=7)
       
plt.xlabel('시간', fontsize = 12)
plt.ylabel('속도', fontsize = 12)
plt.title('파이썬 그래프에 한글 폰트 사용하기', fontsize = 13, color ='red')

ax.spines['right'].set_visible(False) #오른쪽 차트 테두리 없애기
ax.spines['top'].set_visible(False) #왼쪽 차트 테두리 없애기

 

 

 

위 코드를 실행하면 오른쪽과 같은 막대 그래프를 그릴 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

한글 범례 만들기

 

matplotlib.patches를 이용하여 원하는 범례를 만들 수 있습니다. 그래프의 색과 그룹을 매칭 시켜서 레이블을 달아주면 됩니다. 

 

import matplotlib.patches as mpatches

# 범례 지정하기

variable_x = mpatches.Patch(color='black',label='그룹 X')
variable_y = mpatches.Patch(color='blue',label='그룹 y')
variable_z = mpatches.Patch(color='red',label='그룹 z')

#범례 나타내기
plt.legend(handles=[variable_x, variable_y, variable_z])

 

 

 

위에서 그린 표준편차 막대그래프에 한글 범례를 만들었습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

엑셀 데이터 가져와서 한글 그래프 그리기

 

지난 포스팅에서 엑셀 csv 파일 데이터를 이용해서 그린 표준편차 라인그래프에 한글 제목과 범례로 바꿔보겠습니다. 

 

fig, ax = plt.subplots(figsize = (10,8))
plt.title('그래프 제목', fontsize=20, color ='red')
plt.xlabel('x축 제목', fontsize = 15)
plt.ylabel('y축 제목', fontsize = 15)


# 변수 x

plt.plot(x,y,'k', c='red', label = '변수 x')
plt.fill_between(x,y-yerr,y+yerr,alpha=0.3, 
                 edgecolor='red', facecolor ='red',
                linewidth=0,antialiased=True)

# 변수 y

plt.plot(x,y1,'k', c='blue', label = '변수 y')
plt.fill_between(x,y1-yerr1,y1+yerr1,alpha=0.3,
                linewidth=0,edgecolor='lightblue',
                 facecolor='blue',antialiased=True)

# 변수 z
plt.plot(x,y2,'k', c='green', label = '변수 z')
plt.fill_between(x,y2-yerr2,y2+yerr2,alpha=0.3, 
                 edgecolor='green', facecolor ='green',
                linewidth=0,antialiased=True)


# 그래프 테두리 없애기
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# x,y축 간격 표시 위치 
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.set(xticks =[0,50,100,150,200,250],yticks =[-250, 0,500, 1000, 1500])


# 그래프 여백 없애기
ax.margins(x=0)

# 그래프 배경색과 투명도 조절
ax.patch.set_facecolor('lightgrey')
ax.patch.set_alpha(0.0)

# 그리드라인
ax.grid(False) #만들고 싶으면 False 로 바꾸기

# 범례 위치
ax.legend(loc='upper right', frameon=False, fontsize = 15)

# 축 제목 위치 바꾸기
ax.yaxis.set_label_position("left")

 

 

코드를 실행시키니 오른쪽과 같이 한글 제목과 한글 범례를 가진 그래프를 그릴 수 있습니다. 

 

오른쪽 그래프에 대한 설명과 전체 코드는 지난 포스팅인 여기서 확인해주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

다음 포스팅에서는 범례를 내가 원하는대로 자유롭게 만드는 방법에 대해 다루도록 하겠습니다. 끝.

 

 

 

 

>> 같이 읽으면 좋은 글

 

파이썬 엑셀 데이터로 라인 그래프 그리기 with 평균, 표준편차 (matplotlib)

 

반응형

댓글