반응형

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()
 
= 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

위의 파이썬 코드를 통해서 다음과 같은 그림을 그릴 수 있다.

그래프 속성은 좌, 우의 플롯의 인자를 다르게 주었지만 같게 그려지는 것을 볼 수 있다.

 

728x90

+ Recent posts