python에도 MATLAB plot과 유사하게 그림을 그릴 수 있는 라이브러리로 matplotlib가 있다.
이는 MATLAB의 plot과 유사한 문법 체계를 가지기 때문에 그 차이만 안다면 사용하기가 쉽다.
관련하여 자주 사용하는 구문을 본 글에서 다루려고 한다.
1. 창 속성
창 속성으로 아래 인자 순서대로 창 번호, 창 크기, 창 해상도를 지정할 수 있다.
1
2
3
|
pyplot.figure(num=NUMBER,
figsize=[X_SIZE_INCH, Y_SIZE_INCH],
dpi=DOT_PER_INCH, ...)
|
cs |
1) 창 번호를 매기면 그래프를 그릴 때, 같은 창에 겹쳐서 그려줄 수 있다. 안쓰면 계속 새로운 창을 생성한다.
2) 창 크기는 인치 단위로 입력된다. 기본 값은 [6,4] 이다.
3) 창 해상도는 고화질로 창을 보여줘야할 때 사용한다. 기본 값은 100이다.
예시는 아래의 '축 속성 및 그래프 속성'에서 같이 다룬다.
2. 축 속성 및 그래프 속성
1) 부 플롯 pyplot.subplot(MNL)/pyplot.subplot(M, N, (L1, L2))
같은 창에 분할하여 여러 개의 그래프를 그릴 수 있다. 기본적으로 부플롯을 설정하지 않으면 한 창에 단일의 그래프를 그리게 된다.
예를 들면 행 2개, 열 3개의 플롯 중에서 2번째 플롯에 그림을 그린다고 하면 다음과 같이 여러 방법으로 입력 할 수 있다.
1
2
|
pyplot.subplot(232) # 1st method
pyplot.subplot(2,3,2) # 2nd method
|
cs |
그래프의 인덱스는 좌상단서부터 1번이며 오른쪽으로 인덱스가 증가한다. 그러면 위 예제의 읽기 순서는 다음과 같다.
1 2 3
4 5 6
만약 다른 플롯까지 확장하여 크게 그리고 싶다면 다음과 같이 해볼 수도 있다.
예를 들면 행 2개, 열 3개의 플롯 중에서 1, 2, 4, 5 번 플롯을 확장하여 쓰고 싶다면 다음과 같이 입력할 수 있다.
1
|
pyplot.subplot(2,3,(1,5))
|
cs |
2) 축 라벨 pyplot.xlabel('LABEL_NAME'), pyplot.ylabel('LABEL_NAME')
각 축의 라벨 이름을 지정해 줄 수 있다. 기본값은 없다.
3) 죽 범위 pyplot.xlim([X_MIN, X_MAX]), pyplot.ylim([Y_MIN, Y_MAX])
각 축의 표현 범위를 지정해 줄 수 있다. 기본값은 그래프를 바탕으로 자동으로 설정한다.
4) 축 눈금 pyplot.xticks([X1, X2, ... XN]), pyplot.yticks([Y1, Y2, ... , YM])
각 축의 눈금을 지정해줄 수 있다. 기본값은 MATLAB에서 적당히 지정해준다.
5) 플롯 제목 pyplot.title('TITLE_NAME')
플롯의 제목을 지정할 수 있다. 이는 부 플롯 마다 제목을 줄 수도 있다는 의미이다. 기본값은 없다.
6) 범례 pyplot.legend(loc=LOCATION_OPTION)
범례는 그래프 별 이름 속성과 위치만을 서술한다. 그래프 별 이름을 넣는 방법은 여러가지 방법이 있다.
첫번째는 그래프 마다 라벨링을 해준 후, legend를 호출하는 방법이다.
두번째는 그래프는 그래프대로 그리고 legend에 그래프 별 라벨을 인자로 넣어주는 방법이다.
7) 그래프 속성
1
2
3
4
5
6
|
pyplot.plot(Xs, Ys, color=COLOR_NAME,
linestyle=LINE_STYLE,
linewidth=M,
marker=MARKER_SIGN,
markersize=N,
label=GRAPH_LABEL)
|
cs |
2차원 그래프는 인자 순서대로 색상, 선 스타일, 선 두께, 마커를 쓴다면 마커 표시, 마커 크기, 범례 라벨 등을 붙일 수 있다.
3. 여러 부가 기능
1) 플롯 격자 그리기 pyplot.grid()
플롯에 격자를 그려준다. 기본값은 무격자 스타일이다.
2) 플롯 초기화하기 pyplot.clf()
플롯을 초기화한다.
3) 그래프 레이아웃 여유있게 만들기 pyplot.tight_layout()
이 함수를 호출하지 않으면 축 라벨이나 그래프 제목이 다른 그래프에 가려 안보이는 경우가 있다.
적당히 라벨과 플롯 간의 여백을 줄 수 있다.
예제 해보기
다음은 0부터 2pi 까지 sine과 cosine 그래프를 여러 플롯에 그래프 속성을 넣어 그리는 예제이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1)
plt.tight_layout()
plt.clf()
x = np.linspace(0,np.pi*2,16)
plt.subplot(2,2,(1,3))
plt.plot(x,np.sin(x),color='blue',marker='*',linestyle='dashed',linewidth=2,label='Sine')
plt.plot(x,np.cos(x),color='red',marker='p',linestyle='dotted',markersize=5,label='Cosine')
plt.xlabel('Angles [deg]')
plt.ylabel('Value')
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plt.title('Sine-Cosine')
plt.legend(loc='best')
plt.grid()
plt.subplot(2,2,2)
plt.plot(x,np.sin(x),'b*--',label='Sine')
plt.xlabel('Angles [deg]')
plt.ylabel('Value')
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plt.title('Sine')
plt.grid()
plt.subplot(2,2,4)
plt.plot(x,np.cos(x),'rp:',label='Cosine')
plt.xlabel('Angles [deg]')
plt.ylabel('Value')
plt.xlim(0,2*np.pi)
plt.ylim(-1,1)
plt.title('Cosine')
plt.grid()
|
cs |
위의 파이썬 코드를 통해서 다음과 같은 그림을 그릴 수 있다.
그래프 속성은 좌, 우의 플롯의 인자를 다르게 주었지만 같게 그려지는 것을 볼 수 있다.
'SW > Others' 카테고리의 다른 글
[PYTORCH] conda 환경에서 vscode에서 쓸 때, DLL load failed (0) | 2021.07.22 |
---|---|
[MATLAB] Simulink에서 MATLAB 스크립트를 이용한 애니메이션 만들기 (0) | 2021.07.20 |
[PYTHON] MATLAB의 drawnow처럼 움직이는 plot 만들기 (0) | 2021.04.04 |
알고리즘 공부 어떻게 시작할까? (0) | 2021.03.22 |
[21.03.21] QT로 만드는 SerialCom (0) | 2021.03.21 |