PYTHON/Python

Python matplotlib 서브플롯 fig, ax(s) 개념과 사용법 기초 정리

진리뷰 2024. 4. 8. 09:00
반응형

 

 

 

Python-matplotlib-서브플롯-fig-ax(s)-개념과-사용법-기초-정리-썸네일
matplotlib 서브플롯 fig, ax

 

 

 

이 글은 Python matplotlib 서브플롯 생성 시 사용하는 fig, ax(s) 개념과 사용법 기초 정리를 담고 있습니다.

 

 

 

Python matplotlib 서브플롯 fig, ax(s) 개념

 

  • matplotlib 라이브러리로 서브플롯 생성 시 사용하는 변수
  • fig(=Figure)

Figure의 앞 글자를 따서 fig로 입력. figure 객체는 이미지 전체(프레임)를 대상으로 하며, 크기/색/서브플롯 등을 포함한다.

이는 그림이 담기는 액자와 같으며, 액자와 관련된 옵션을 다룬다고 보면 된다.

  • ax(s) (=Axes, ax)

Axes를 ax 혹은 axs로 입력. axes 객체는 서브플롯을 대상으로 하며, 각 서브플롯 그래프/타이틀 등을 포함한다.

이는 액자 속 그림과 같으며, 그림과 관련된 옵션을 다룬다고 보면 된다.

 

python-axis-axes-figure
출처: https://matplotlib.org/1.5.1/faq/usage_faq.html#parts-of-a-figure

 

 

 

Python matplotlib 서브플롯 fig, ax(s) 사용법

 

  • plt.subplots(행 개수, 열 개수)

가장 기본 형태로, 최상단 맨 왼쪽이 (1,1)이다.

(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)

 

 

그래프는 맨 왼쪽부터 오른쪽 방향으로 그려진다.

1 2
3 4

 

 

만약 그래프 3개를 한 줄에 1개씩 그리고 싶다면, 아래처럼 입력한다.

(쉽게 말해, 하나의 액자 속에 그림 세 개를 세로 정렬한 것이다.)

이때 plt.tight_layout()은 여러 그래프를 그릴 때, 그래프들이 겹치지 않도록 간격을 자동 설정 해준다.

 

import matplotlib.pyplot as plt

# 3행 1열
fig, axs = plt.subplots(3, 1)

# 겹침 방지
plt.tight_layout();

 

 

plt.subplots-fig-ax
plt.subplots() 예시

 

 

 

첫 번째 방법: plt.subplots(행 개수, 열 개수, 위치)

 

위 코드는 하나의 액자 속에 세 개의 그림이 그려질 공간들만 할당한 것이다.

이제 할당된 공간별로 그림(그래프)을 그려보자.

3행 1열로 여러 그림을 그리기 때문에, 아래 코드처럼 각 그림들의 위치를 지정해야 한다.

이때 plt.subplots(311)처럼 콤마 생략 가능하다.

fig, axs = plt.subplots(3, 1, figsize=(10,5))

# 3행 1열 중 1행
plt.subplot(3,1,1)
plt.plot(df_cust['Date_1'], df_cust['CustomerID'], color='tab:blue')

# 3행 1열 중 2행
plt.subplot(3,1,2)
plt.plot(df_cnt['Date_1'], df_cnt['InvoiceNo'], color='tab:red')

# 3행 1열 중 3행
plt.subplot(3,1,3)
plt.plot(df_country['Date_1'], df_country['Country'], color='tab:green')

plt.tight_layout();

 

plt.subplots-fig-ax
plt.subplots() 예시

 

 

 

두 번째 방법: ax[위치].plot()

 

위 코드와 결과는 똑같다. 대신 이 코드는 Python 인덱싱을 활용하기에, 시작값이 0이다.

따라서 첫 번째 위치에 그리고 싶다면 0부터 시작한다.

그리고 여러 그림이 있으면 헷갈리니, set_title( )로 각 그림별 제목도 추가 설정해 보자.

fig, axs = plt.subplots(3,1,figsize=(10,10))

# 3행 1열 중 1행
axs[0].plot(df_cust['Date_1'], df_cust['CustomerID'], color='tab:blue')
axs[0].set_title('Customer_cnt')

# 3행 1열 중 2행
axs[1].plot(df_cnt['Date_1'], df_cnt['InvoiceNo'],color='tab:pink')
axs[1].set_title('Order_cnt')

# 3행 1열 중 3행
axs[2].plot(df_country['Date_1'], df_country['Country'], color='tab:green')
axs[2].set_title('Country_cnt')

plt.tight_layout();

 

plt.subplots-ax-plot
ax[ ].plot( ) 예시

 

반응형
top