본문 바로가기
Matplotlib/subplot 구조 이해

[matplotlib] 파이썬 한 화면에 여러 그래프 그리기 (subplots)

by 만다린망고 2022. 3. 15.
반응형

mabplotlib 에서 화면을 분할하여 그래프를 그래는 메소드는 여러가지가 있습니다. 그 중 subplots 메소드로 그리는 방법을 알아봅시다. subplots 메소드를 사용하려면 두가지를 알아야 합니다. 

- Figure
- subplot

figure 는 그래프가 그려지는 화면입니다. subplot 은 그래프입니다. 한 figure 안에 여러개의 그래프를 그릴 수 있습니다. 

그래프는 보통 ax 라고 이름붙입니다. figure 하나를 만들고 그래프 네개를 그려보겠습니다. 

먼저 matplotlib 를 불러옵시다. 

import matplotlib.pyplot as plt


subplots 메소드를 실행해봅시다. 2,2 는 화면을 2행2열로 분할하겠다는 의미입니다. 

plt.subplots(2,2)

>>> plt.subplots(2,2)
(<Figure size 640x480 with 4 Axes>, array([[<AxesSubplot:>, <AxesSubplot:>],
       [<AxesSubplot:>, <AxesSubplot:>]], dtype=object))


Figure 와, 4r개의 ax 가 있는 것을 알 수 있습니다. 아래와 같이 변수를 지정하면 Figure와 ax를 변수를 이용하여 접근할 수 있게됩니다. 

fig,ax=plt.subplots(2,2)

>>> fig
<Figure size 640x480 with 4 Axes>
>>> ax
array([[<AxesSubplot:>, <AxesSubplot:>],
       [<AxesSubplot:>, <AxesSubplot:>]], dtype=object)


각 ax에 그래프를 그려봅시다. 

#그래프 그리기
ax[0,0].plot(np.linspace(0,100,20),np.linspace(0,100,20)**2, marker='o', markersize=2, markeredgecolor='r')
ax[0,1].hist(np.random.randn(500), bins=30, color='b', alpha=0.5)
ax[1,0].bar([1,3,5,7],np.array([1,2,3,4]),color='r')
ax[1,1].boxplot(np.random.randn(500,5))

plt.show()

 

 

이번에는 제목과 축이름을 추가해봅시다. 첫번째 그래프에만 추가하겠습니다. 나머지 그래프에도 적용 원리는 동일합니다. 공간이 필요하므로 subplots_adjust 메소드로 세로와 가로 간격을 확보합니다. 

 

#그래프 사이 간격 추가
fig.subplots_adjust(hspace=0.5,wspace=0.3)

#제목, x축,y축 이름 추가
ax[0,0].set_xlabel('X') #x 라벨
ax[0,0].set_ylabel('Y') #y 라벨
ax[0,0].set_title("Graph1") #그래프 이름

 

아래는 결과입니다. 

 

 

 

아래는 전체 코드입니다. 

 

import matplotlib.pyplot as plt
import numpy as np

#figure,ax 만들기
fig,ax=plt.subplots(2,2)

#그래프 그리기
ax[0,0].plot(np.linspace(0,100,20),np.linspace(0,100,20)**2, marker='o', markersize=2, markeredgecolor='r')
ax[0,1].hist(np.random.randn(500), bins=30, color='b', alpha=0.5)
ax[1,0].bar([1,3,5,7],np.array([1,2,3,4]),color='r')
ax[1,1].boxplot(np.random.randn(500,5))

#그래프 사이 간격 추가
fig.subplots_adjust(hspace=0.5,wspace=0.3)

#제목, x축,y축 이름 추가
ax[0,0].set_xlabel('X') #x 라벨
ax[0,0].set_ylabel('Y') #y 라벨
ax[0,0].set_title("Graph1") #그래프 이름

plt.show()

 

 

반응형

댓글