본문 바로가기
Python/Matplotlib

서브플롯(subplot)과 tight_layout() 옵션(키워드인자) 상세사항 - matplotlib(22)

by 콩돌 2019. 6. 2.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.1.0 기준



 서브플롯(subplot)의 키워드 인자 상세사항 


본 포스팅에서는 subplot() 함수 및 tight_layout() 함수의 입력 키워드인자에 대한 상세 설명를 다룬다.

서브플롯의 기초적인 작성법은 선행포스팅(링크)를 참고하도록 한다.


 subplot(*args, **kwargs)


이 함수는 Figure에 나뉜 영역 중 서브플롯(subplot)을 추가해주는 함수이다.


 *args

입력 형태: int


설명

3자리수의 정수(pos)나 3개의 분리된 정수(nrows, ncols, index)를 입력 받는다.

입력되는 정수는 plot의 좌표를 나타내며, 두 방식 모두 동일하게 아래와 같이 좌표가 입력된다.

  - 첫번째 정수 : nrows, subplot의 행의 수를 나타낸다.

  - 두번째 정수 : ncols, subplot의 열의 수를 나타낸다.

  - 세번째 정수 : index, 인덱스를 나타낸다. 인덱스는 1부터 시작하며 순서는 위부터 오른쪽으로 위쪽에서 아래쪽 방향으로 설정된다.

  ※ 각 정수는 10보다 작은 값이어야 한다.


입력방식 예제)

# 3개로 분리된 정수를 사용한 입력 방법

subplot(nrows, ncols, index, **kwargs)


# 3자리수의 정수를 사용한 입력방법

subplot(pos)



 projection

입력 형태: str, None


설명

선택적으로 입력이 가능하다.

플롯의 투영(projection) 방법을 설정한다. 

다양한 투영 방법이 존재하며, 아래와 같다.

  - None, 'aitoff', 'hammer', 'lambert', 'mollweide', 'polar', 'rectilinear', str가 입력 가능하다.

  - 이 중에 가장 많이 쓰이는 'rectilinear'로 선형적인 사각형 모양의 투영 방법을 선택한다.

  - 그 외에 다른 방법은 해당하는 문자열에 projection을 추가해서 구글링하면 어떤식의 투영방식인지 확인할 수 있으므로 참고바란다. 

기본값 None이며, 이 때 'rectilinear'가 입력된다.



 polar

입력 형태: bool


설명

선택적으로 입력이 가능하다.

True일 경우, projection='polar'와 동일하다.


 sharex, sharey

입력 형태: Axes 


설명

선택적으로 입력이 가능하다.

입력된 축(axis)과 x축 혹은 y축을 서로 공유한다. 

공유된 축(axis)는 범위(limit), 틱(tick), 스케일(scale)을 동일하게 가진다. 



 label

입력 형태: str


설명

선택적으로 입력이 가능하다.

입력되는 그래프(axes)의 라벨을 작성한다.



 **kwargs


설명

subplot()함수는 axes의 베이스클래스에 대한 키워드 인자를 사용할 수 있다.

만약에 투영(projection)방법이 'rectilinear'라면 이곳(링크)에서 제시된 테이블에 제시된 추가적인 키워드 인자를 사용하는 것이 가능하다.



 tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)


이 함수는 자동으로 명시된 여백(padding)에 관련된 서브플롯 파라미터를 조정한다.

이 함수에서의 모든 키워드 인자는 선택적으로 입력 가능하다.

입력 없이 사용할 경우 기존에 세팅된 기본값을 이용하여 자동으로 레이아웃을 설정한다.


 pad

입력 형태: float


설명

figure의 모서리와 서브플롯의 모서리 사이의 여백(padding)을 설정한다.

이 키워드 인자의 입력값은 폰트 크기와 여백간의 분율이다.

기본값은 1.08이다. 



 h_pad, w_pad

입력 형태: float 


설명

서로 인접한 서브플롯(subplot)의 모서리(edge)간의 높이 및 너비의 여백을 설정한다.

h_pad는 높이의 여백을, w_pad는 너비의 여백을 설정한다. 

기본값은 None이다.



 rect

입력 형태: tuple (left, bottom, right, top) 


설명

서브플롯을 넣기 위한 사각형을 설정하며 (왼쪽, 바닥쪽, 오른쪽, 위쪽)의 값을 입력 받는다.

입력되는 값은 figure의 총 크기대비로 정규화된 값이다.

기본값은 (0, 0, 1, 1)을 입력받는다.





 figure의 생성 및 선택 방법


figure() 함수는 matplotlib에서 figure를 만들고 편집할 수 있게 만들어주는 함수이다.


  figure의 작성 방법

먼저 figure() 함수의 주요 인자에 대한 작성 형식은 다음과 같다. 


figure()의 작성 형식)

fig=figure(num=figure number, figsize=(x,y))

fig=figure(figure number, (x,y))

fig=figure()


첫번째 줄과 같이 키워드 인자를 사용하여 입력이 가능하고, 두번째와 같이 위치인자를 이용하여 입력하는 방식 역시 가능하다.

세번재 줄처럼 아예 입력을 입력하지 않는 경우 기본 값으로 설정된 새로운 figure를 생성하며, 좀 더 응용하면 키워드 인자를 입력하여 figsize만 입력하는 것도 가능하다.


각 입력 변수가 의미하는 바는 다음과 같다.

  - num에 입력되는 figure number는 figure의 번호를 의미한다.  

  - figsize에 입력되는 이터레이블은 figure의 사이즈를 의미하며, 인치(inch)단위로 입력받는다.



  figure의 작성 예제

figure에 대한 설명은 대화형 모드를 통해 진행하는 것이 이해하기 좋다고 생각하여 스크립트 대신 대화형 모드를 사용하고자 한다.

아래 예제는 figure() 함수를 사용하는 간단한 예제를 보여준다.


matplotlib의 import

먼저 예제를 진행하기위해 matplotlib를 import 해줘야한다.


In[2]: import matplotlib.pyplot as plt



자동기능을 활용한 figure의 생성

아무 입력 없이 figure() 함수만 실행할 경우 기본 값으로 입력된 figure를 생성한다.

다른 figure가 여러개 존재하더라도 이렇게 실행할 경우 새로운 figure를 생성한다.

아래의 예제에서는 figure가 없는 상태에서 생성을 했으므로 figure1이 생성이 된다.

figure가 생성 뒤에는 해당 figure가 활성화 되어 있으므로 해당 figure에서 작업을 진행시킬 수 있다. 


In[3]: plt.figure()

Out[3]: <Figure size 640x480 with 0 Axes>

In[4]: plt.plot([1,2,3])

Out[4]: [<matplotlib.lines.Line2D at 0x1173e430>]



위치 인자를 통한 figure의 생성 및 크기 조정

아래의 예제는 위치인자를 통해 figure를 생성하는 것을 보여준다.

첫번째 위치에는 figure number를 두번째에는 figure의 사이즈를 입력받는다.

num자리에 3을 입력했으므로 figure 3이 생성된다.



In[5]: plt.figure(3,[5,6])

Out[5]: <Figure size 500x600 with 0 Axes>

In[6]: plt.plot([3,2,1])

Out[6]: [<matplotlib.lines.Line2D at 0xee73a50>]



num과 figsize 키워드인자를 통한 figure의 생성 및 크기 조정

아래의 예제는 키워드 인자를 통해 figure를 생성하는 것을 보여준다.

각각의 키워드 인자에 필요한 수치를 입력했다.

num에 5을 입력했으므로 figure 5가 생성된다.


In[7]: plt.figure(num=5, figsize=[10,10])

Out[7]: <Figure size 1000x1000 with 0 Axes>

In[8]: plt.plot([2,3,4])

Out[8]: [<matplotlib.lines.Line2D at 0xf241b30>]



num과 figsize를 통한 figure의 활성화

앞서 작성했던 figure 3을 다시 편집하기 위해서도 figure() 함수를 적용할 수 있다.

이 예제에서는 키워드 인자를 이용하여 figure 3을 활성화 시킨 후 편집을 진행하였다.

해당 예제를 수행하면 figure 3의 플롯에 데이터가 추가되는 것을 확인할 수 있다.

이 예제에서는 키워드 인자를 이용하였지만, 위치 인자를 이용해서 하는 것도 가능하다.


In[9]: plt.figure(num=3)

Out[9]: <Figure size 500x599 with 1 Axes>

In[10]: plt.plot([5,6,7])

Out[10]: [<matplotlib.lines.Line2D at 0xf291e30>]





 figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)


이 함수는 Figure를 생성 및 편집 할 수 있게 해준다. 


 num

입력 형태: int, str


설명

선택적으로 입력이 가능하다.

입력 형태에 따라 거동이 변화하며, 크게 입력되지 않을 경우와 정수(int)가 입력되는 경우, 그리고 문자열(string, str)이 입력되는 경우가 존재한다.


값이 입력되지 않는 경우(혹은 None의 입력)

새로운 Figure를 생성시키며 Figure 개수가 늘어난다.
생성된 Figure 오브젝트는 Figure의 number 어트리뷰트에 몇 번째 Figure인지에 대한 정보가 들어가있다.

정수가 입력된 경우
만약 이 값이 정수(int)로 입력되고, 이미 해당 Figure가 존재할 경우 해당 Figure를 활성화(active)시키며, 이를 참조로 반환한다.
만약 이 값이 정수(int)로 입력되는데, 해당 Figure가 존재하지 안는다면 입력된 번호에 해당하는 Figure를 생성한다.

문자열이 입력된 경우
이 값에 문자열(string, str)이 입력될 경우, 윈도우(window)의 타이틀은 num에 입력된 문자열로 설정된다.

기본값은 None이며, 이 경우 위에 설명된바와 같이 새로운 Figure를 생성한다.



 figsize

입력 형태: (float, float)


설명

선택적으로 입력이 가능하다.

figure의 너비(width), 높이(height)를 인치(inch)단위로 입력 받는다.

기본값은 None이고, 이 경우 rcParams["figure.figsize"]=[6.4, 4.8]으로 입력된다. 



 dpi

입력 형태: int


설명

선택적으로 입력이 가능하다.

figure의 해상도(resolution)을 설정할 수 있다.

기본값은 None이며, 이 경우 rcParams["figure.dpi"]=100가 입력된다.



 facecolor

입력 형태: color spec


설명

선택적으로 입력이 가능하다.

figure의 배경(background)의 색을 설정한다.
선행포스팅(링크) 색상 설정과 동일한 색상 코드를 입력받을 수 있다.


 edgecolor

입력 형태: color spec


설명

선택적으로 입력이 가능하다.

figure의 모서리(edge)의 색을 설정한다.

선행포스팅(링크) 색상 설정과 동일한 색상 코드를 입력받을 수 있다.


 frameon

입력 형태: bool


설명

선택적으로 입력이 가능하다.

False이 입력될 경우, figure의 프레임(frame)을 그리는 것을 막는다.

기본값은 True이다. 



 FigureClass

입력 형태: subclass of Figure 


설명

선택적으로 입력이 가능하다.

커스터마이징된 Figure 인스턴스를 사용할 수 있다.



 clear

입력 형태: bool


설명

선택적으로 입력이 가능하다.

True가 입력되고 이미 figure가 존재하는 경우에 이를 제거한다.

기본값은 False이다.




 

 

 

 

 참고자료

  https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html

  https://matplotlib.org/api/_as_gen/matplotlib.pyplot.tight_layout.html#matplotlib.pyplot.tight_layout

  https://matplotlib.org/tutorials/intermediate/tight_layout_guide.html#sphx-glr-tutorials-intermediate-tight-layout-guide-py

 

 

 

 



반응형

댓글