[python] matlab과 비슷한 방식으로 plot 그리기, matplotlib.pyplot

코딩/python|2020. 7. 10. 18:38

728x90

matplotlib은 파이썬에서 데이터를 시각화(visualization)하는데 널리 사용되는 라이브러리 또는 패키지입니다. matplotlib 패키지 내에는 여러 모듈들이 있습니다. 그 중에서 pyplot 모듈은 matlab과 비슷한 방식으로 plot을 그릴 수 있게 도와주는 모듈입니다. 오늘은 matplotlib.pyplot을 이용해서 plot을 그리는 법에 대해 다루도록 하겠습니다. 

 

두 개 함수의 그래프 동시에 그리기

간단히 y = sin(x)와 y = cos(x)의 그래프를 동시에 그려볼까요? matlab에 익숙하신 분들은 아래 코드가 익숙하실 것입니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import matplotlib.pyplot as plt
 
= np.arange(0100.01);
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, c='r')
plt.plot(x, y2, c='b')
plt.title('y = sin(x) and y = cos(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(['y = sin(x)''y = cos(x)'])
plt.grid(True)
cs

 

위 코드를 실행하면 다음과 같은 그래프가 그려집니다. 

 

 

matlab을 사용해보신 적이 없으신 분들도 위 코드와 그래프를 동시에 살펴보시면 각 행의 의미를 쉽게 발견하실 것입니다. 

 

두 개 함수의 그래프 subplot을 이용해서 하나씩 그리기

이번에는 두 개 함수의 그래프를 subplot을 이용해서 하나씩 그려보겠습니다. 코드는 다음과 같이 바꿔주면 됩니다. 역시 matlab을 이용할 때와 거의 동일합니다. matlab에 익숙하신 분들은 직관적으로 올바른 코드를 찾아가실 수 있습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import matplotlib.pyplot as plt
 
= np.arange(0100.01);
y1 = np.sin(x)
y2 = np.cos(x)
 
plt.subplot(121)
plt.plot(x, y1, c='r')
plt.title('y = sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
 
plt.subplot(122)
plt.plot(x, y2, c='b')
plt.title('y = cos(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
cs

 

위 코드를 실행하면 다음과 같은 그림이 그려집니다. 

 

너무 가까워.

 

잘 그려지긴 했지만, 문제가 있습니다. 두 그래프가 너무 붙어있습니다. 심지어 겹쳤죠. subplot들의 간격을 조정해줄 필요가 있습니다. 위 코드에 plt.tight_layout() 한 줄의 코드만 더해주면 됩니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
import matplotlib.pyplot as plt
 
= np.arange(0100.01);
y1 = np.sin(x)
y2 = np.cos(x)
 
plt.subplot(121)
plt.plot(x, y1, c='r')
plt.title('y = sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
 
plt.subplot(122)
plt.plot(x, y2, c='b')
plt.title('y = cos(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
 
plt.tight_layout()
cs

 

간격이 잘 조정되었는지 위 코드를 실행시켜서 확인해보겠습니다. 

 

적절하군.

 

적절하게 간격이 잘 조정된 것을 확인할 수 있습니다.