파이썬 기초 문법 강의 – 8일차 Subplot

파이썬 기초 문법 강의 – 8일차 Subplot

파이썬에서는 여러가지 그림을 그리기 위한 함수로 subplot과 subplots가 있습니다.

파이썬 subplot

subplot은 기본적으로 subplot(nrows,ncols,index,**kwargs)형태를 가지는데요.

subplot()의 인자 3개는 순서대로 1)행의 수, 2)열의 수, 3)번호를 나타냅니다.

import matplotlib.pyplot as plt
import numpy as np

#x 값 0부터 5까지 0.1단위씩 생성
x =  np.arange(0,5,0.1)

# 첫번째 플롯 (y=x2)
ax1= plt.subplot(1,3,1)
graph1= plt.plot(x,x**2)

# 두번째 플롯(직접 수 입력)
ax2= plt.subplot(1,3,2)
graph2= plt.bar(x=[1,2,3], height=[1,2,3])

# 세번째 플롯
ax3= plt.subplot(1, 3, 3)
graph3= plt.scatter(x,np.sin(x))

plt.show()

실행하게 되면 아래처럼 3개의 그래프가 한번에 그려지게 됩니다.

plt.subplot

그리고 subplots 함수가 있는데요.

파이썬 subplots

한두개의 함수라면 subplot으로도 충분하지만 함수의 갯수가 늘어난다면 개별로 함수를 입력해야 하는 subplot의 한계가 있습니다.

subplots() 라이브러리를 활용하면 기본적으로 fig, ax = plt.subplots() 이런 형태가 됩니다.

subplots()에선 figure 와 axes의 두개의 값을 받을 수 있는데요. 이를 좀 살펴보면

  • fig란 figure로써 – 전체 subplot을 말하고
  • ax는 axes로써 – 전체 중 낱개를 말합니다.
axes

아래의 예시를 통해서 간단히 알아 볼 수 있는데요.

import matplotlib.pyplot as plt
import numpy as np

x =  np.arange(0,5,0.1)

fig, ax = plt.subplots(nrows=1, ncols=3)

#함수 설정
ax[0].plot(x,x**2,'r-*',lw=1)
#그리드 설정
ax[0].grid(True)
#라벨 적기
ax[0].set_ylabel(r'x**2')
#축설정(x최소값, x최대값,y최소값,y최대값)
ax[0].axis([0,3,0,4])

ax[1].plot(x,2*x,'b--o',lw=1)
ax[1].grid(True)
ax[1].set_xlabel('x')
ax[0].set_ylabel('2x')
ax[1].axis([0,3,0,5])


ax[2].plot(x,np.sin(x),'b--o',lw=1)
ax[2].set_ylabel(r'$sin(x)$')
ax[2].axis([0,5,-2,2])

plt.show()
subplots

그리고 아래와 같이 히스토그램을 그려볼 수 있습니다. 히스토그램 (Histogram)은 도수분포표를 그래프로 나타낸 것으로서, 가로축은 계급, 세로축은 도수 (횟수나 개수 등)를 나타내는 그래프입니다.

import matplotlib.pyplot as plt
import numpy as np

x =  np.arange(0,5,0.1)

fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True)
axs = [ax1, ax2,ax3, ax4]

#hist() 함수의 bins= 가로축 갯수)
#np.random.normal(loc=0.0,scales=1.0,size=None) scale은 표준편차,size는 샘플의 사이즈를 의미하는 듯합니다.
for n in range(0, len(axs)):
    sample_size = 10**(n+1)
    sample = np.random.normal(loc=0.0, scale=1.0, size=sample_size)
    axs[n].hist(sample, bins = 100)
    axs[n].set_title('n={}'.format(sample_size))

plt.show()

사실 subplots는 워낙 사용 방법이 다양하기 때문에 하나씩 테스트 해보시면서 배워가는 방법이 가장 빠릅니다.

아래의 위키독스에 많은 사용법이 있으니 참고하시면 좋을 것 같습니다.

그럼 즐거운 하루 보내세요.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다