본문 바로가기
self.python

[python] matplotlib 그래프 여러 개 그리는 방법

by 톤토니 2022. 6. 6.
반응형

 

그래프 여러개

[python] matplotlib 그래프 여러 개 그리는 방법

 

matplotlib 를 활용하여 한 번에 그래프를 여러 개 그리는 방법을 알아보자.

 

1. 라이브러리 import

import matplotlib.pyplot as plt # matplotlib
import numpy as np # 예시로 사용할거라 import

파이썬에서 matplotlib를 import 해준다.

 

2. sub plot 의 size 정하기

fig, axes = plt.subplots(2, 1) 
#2x1 = 총 2개의 서브 피규어 생성

subplot 의 size를 (2, 1) 로 지정한 것은 두 개가 세로로 놓여져 있는 그래프 두 개를 동시에 그리겠다는 것이다.

만약 (1, 2) 라고 썼다면 가로로 놓여져 있는 그래프가 그려졌을 것이다.

 

 

 

위의 사진을 보면 이해가 바로 될 것이다.

(2, 1)에서 그래프는 (0, 0), (1, 0) 좌표로 지정할 수 있다.

 

 

3. 그래프 그리기

fig, axes = plt.subplots(2, 1)

x = [i for i in range(20)] # 0 ~ 19 까지의 수

y = [np.random.randint(1, 10) for i in range(20)] 
# 1부터 10 사이에 랜덤한 수 20개

axes[0].plot(x, y) # 선 그래프

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[1].bar(x, y) # 바 그래프

plt.tight_layout()
plt.show()

 

이렇게 2X1 그래프가 잘 그려졌음을 확인할 수 있다.

 

x 값은 0부터 19 까지의 리스트이고,

y 값은 리스트 컴프리헨션을 이용하여 1부터 10 사이의 임의의 값 20개를 리스트로 만든 것이다.

 

 

 

만약 1X2 라고 썼다면?

 

이렇게 가로로 2개의 그래프가 나오는 것을 확인할 수 있다.

 


 

2 X 2 로 쓴다면? 총 4개의 그래프가 나와야 한다.

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

x = [i for i in range(20)]
y = [np.random.randint(1, 10) for i in range(20)]
axes[0][0].plot(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[0][1].bar(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[1][0].bar(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[1][1].scatter(x, y)


plt.tight_layout()
plt.show()

 

이 경우 앞에서와 같이 axes가 1차원이 아니고 2차원이기 때문에

그래프가 그려질 좌표를 지정할 때, 2차원으로 지정해주어야 제대로 그래프가 나오는 것을 확인할 수 있다.

 

 

 

 

총 정리

import matplotlib.pyplot as plt
import numpy as np

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

x = [i for i in range(20)]
y = [np.random.randint(1, 10) for i in range(20)]
axes[0][0].plot(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[0][1].bar(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[1][0].bar(x, y)

x = range(20)
y = [np.random.randint(1, 10) for i in range(20)]
axes[1][1].scatter(x, y)


plt.tight_layout()
plt.show()

 

 

 

 

반응형

댓글