본문 바로가기
파이썬/시각화 matplot

여러개의 그래프와 범례

by Merware 2023. 5. 15.

[학습목표]
여러개의 그래프를 한번에 그리고 범례를 표시할 수 있다.

 

라이브러리 임포트 및 그래프 설정

라이브러리 임포트

import matplotlib.pyplot as plt

 

그래프 설정

import matplotlib as mpl
# 그래프에 한글 설정
mpl.rcParams['font.family'] = 'NanumGothic'

# 그래프에 마이너스 기호 깨지는 문제 해결
mpl.rcParams['axes.unicode_minus'] = False

 

여러개의 그래프 한번에 그리기

import pandas as pd
df1 = pd.DataFrame({'월':[1,2,3,4,5],'몸무게':[80,78,75,73,70]})
df2 = pd.DataFrame({'월':[1,2,3,4,5],'몸무게':[60,62,59,55,54]})

df1

"""
	월	몸무게
0	1	80
1	2	78
2	3	75
3	4	73
4	5	70
"""

df2

"""
	월	몸무게
0	1	60
1	2	62
2	3	59
3	4	55
4	5	54

 

여러 개의 그래프 각각 그리기

  • plt.show()로 그래프를 구분한다.
plt.plot(df1['월'],df1['몸무게'])
plt.show()

plt.plot(df2['월'],df2['몸무게'])
plt.show()

 

데이터가 다른 두 그래프 그리기

  • plt.show()를 마지막에 한번만 사용한다.
#x축 틱 라벨
def fn_xtick(x):
    x = str(x)
    if x=='0' or x=='13':
        return ''
    else:
        return x+'월'

xtick_label = pd.Series(range(0,14,1))
xtick_label = xtick_label.apply(fn_xtick)
xtick_label

"""
0        
1      1월
2      2월
3      3월
4      4월
5      5월
6      6월
7      7월
8      8월
9      9월
10    10월
11    11월
12    12월
13       
dtype: object
# y축 틱 라벨
def fn_ytick(x):
    x = str(x)
    return x+'kg'

ytick_label = pd.Series(range(30,95,5))
ytick_label = ytick_label.apply(fn_ytick)
ytick_label

"""
0     30kg
1     35kg
2     40kg
3     45kg
4     50kg
5     55kg
6     60kg
7     65kg
8     70kg
9     75kg
10    80kg
11    85kg
12    90kg
dtype: object

 

# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'])
plt.plot(df2['월'],df2['몸무게'])

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()

 

범례 표시하기

  • 여러 개의 플롯을 동시에 그리는 경우 각 그래프가 무엇을 표시하는지 보여주기 위해 범례를 추가한다.
    1) 그래프에 레이블을 지정한다.(label=그래프명)
    2) 범례를 표시한다. --> plt.legend()
  • 범례의 위치는 그래프에 따라 최적의 위치에 자동으로 표시된다.
# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'], label='James')
plt.plot(df2['월'],df2['몸무게'], label='Amy')
plt.legend()

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()

범례 위치 지정

  • plt.legend(loc=위치번호)
  • plt.legend(loc=위치이름)
      Location String   Location Code
      ===============   =============
      'best'            0
      'upper right'     1
      'upper left'      2
      'lower left'      3
      'lower right'     4
      'right'           5
      'center left'     6
      'center right'    7
      'lower center'    8
      'upper center'    9
      'center'          10
      ===============   =============
  • plt.legend(loc=(x위치,y위치)) : 범례의 왼쪽 하단이 기준점.

범례 위치 번호 사용

# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'], label='James')
plt.plot(df2['월'],df2['몸무게'], label='Amy')
plt.legend(loc=1)

#'best'            0
#        'upper right'     1
#        'upper left'      2
#        'lower left'      3
#        'lower right'     4
#        'right'           5
#        'center left'     6
#        'center right'    7
#        'lower center'    8
#        'upper center'    9
#        'center'          10

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()

 

범례 위치 이름 사용

Type Markdown and LaTeX: 𝛼2

# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'], label='James')
plt.plot(df2['월'],df2['몸무게'], label='Amy')
plt.legend(loc='center')

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()

 

범례 x,y 위치 지정

  • loc=(x,y)
    왼쪽 아래 꼭지점 기준
# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'], label='James')
plt.plot(df2['월'],df2['몸무게'], label='Amy')
plt.legend(loc=(1.01,0.8))

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()

 

범례 속성 지정

  • 열 개수 : plt.legend(ncol=열개수)
  • 폰트 사이즈 : plt.legend(fontsize=폰트사이즈)
  • 테두리 : plt.legend(frameon=True/False)
  • 음영 : plt.legend(shadow=True/False)
  • 바탕색 : plt.legend(facecolor=색상)
  • 테두리색 : plt.legend(edgecolor=색상)
# 두 그래프 그리기
plt.plot(df1['월'],df1['몸무게'], label='James')
plt.plot(df2['월'],df2['몸무게'], label='Amy')
plt.legend(ncol=2,fontsize=12,shadow=True,facecolor='ivory',edgecolor='k')

# 그래프 제목
plt.title('월별 몸무게 변화', size=15)

# 축 라벨
plt.xlabel('월', fontsize=12)
plt.ylabel('몸무게(kg)', fontsize=12)

# x축 틱 : 1월, 2월, 3월,...,12월
plt.xticks(range(0,14,1), labels=xtick_label)

# y축 틱 : 30kg, 35kg, 40kg, ..., 90kg
plt.yticks(range(30,95,5), labels=ytick_label)

# 그리드
plt.grid(ls=':')

plt.show()