본문 바로가기
Python/Matplotlib

Matplotlib, pyplot, pylab의차이점과 코딩스타일 - matplotlib(2)

by 콩돌 2019. 3. 30.
반응형

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



  Matplotlib, pyplot, pylab의 차이점과 코딩스타일


  Matplotlib, pyplot, pylab의 차이점


  Matplotlib

Matplotlib는 전체를 아우르는 패키지이다.


  pyplot

pyplot은 Majtplotlib에서 지원하는 모듈 중 하나이다. 

  ○ pyplot은 사용환경 인터페이스(state-machine interface)를 제공한다.

  ○ pyplot의 인터페이스는 겉으로는 드러나지 않으면서 자동으로 figure와 axes를 생성하며, 정의된 플롯을 얻을 수 있도록 만들어 준다.


아래 예제는 plot생성을 위한 예제를 보여주며 대화형 모드에서 진행이 되었다.

  ○ 그림에서 볼 수 있듯이 단순한 코드만 몇 줄로 그래프가 생성된다.

  ○ 즉, 사용자가 명령을 내리고 명령에 따라 자동으로 그래프가 그려진다.

    ▷ 그래프를 그리기위해 matplotlib는 사용자가 보이지 않는 곳에서 명령을 받아 그래프를 작성한다.


plot 생성 예제)

# 모듈의 import

In[2]: import numpy as np

In[3]: import matplotlib.pyplot as plt

Backend Qt5Agg is interactive backend. Turning interactive mode on.


# 입력용 배열작성

In[4]: x = np.arange(0,100)


# 플롯데이터 입력 

In[5]: plt.plot(x,x, label='first')

Out[5]: [<matplotlib.lines.Line2D at 0x125deff0>]

In[6]: plt.plot(x,x**2, label='second')

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

In[7]: plt.plot(x,x**3, label='third')

Out[7]: [<matplotlib.lines.Line2D at 0x1262f470>]


# 플롯 편집 

In[8]: plt.xlabel('x')

Out[8]: Text(0.5,23.4122,'x')

In[9]: plt.ylabel('y')

Out[9]: Text(12.0972,0.5,'y')

In[10]: plt.legend()

Out[10]: <matplotlib.legend.Legend at 0x138baa90>

In[11]: plt.title("Plot")

Out[11]: Text(0.5,1,'Plot')



  pylab

pylab은 matplotlib을 설치할 때 같이 설치되는 모듈 중 하나이다.

  ○ pylab은 편리한 모듈이며, 대부분의 matplotlib.pyplot과 numpy를 하나의 네임스페이스에 임폴트시킨다. 

    ▷ 편리하긴 하지만 네임스페이스를 오염시킬 우려가 크다.

  ○ pylab은 앞으로 사라지게될 것으로 보이며, 따라서 이걸 사용하는 것은 권장되지 않는다. 

  ○ 이것 대신 pyplot을 사용하는 것이 추천된다. 


※ 비대화형 플롯팅의 경우에는 figure를 생성하기 위해 pyplot을 사용하고 플롯팅을 위해서 객체지향(OO) 인터페이스를 사용하는 것이 좋다. 



  코딩 스타일

여러 예제와 관련 자료를 보다보면, 코딩 스타일과 패턴이 다르다는 것을 찾을 수 있다.

이런 스타일들은 모두 유효하며 장단점을 가진다.
단지 모든 예제는 다른 스타일로 작성될 수 있으며 같은 결과를 낼 수 있다. 
단 주의할 점으로는 각 사용자 소유하고 유지보수하는 코드에 대해서는 서로 다른 코딩스타일이 섞이는 것을 피해야 한다.

참고사항 
  단, matplotlib의 개발자들은 명확한 스타일과 가이드라인을 따라야한다. 
  아래 주소는 개발자들을 위한 가이드이므로 matplot 개발자가되기를 원한다면(?) 참고하는 것을 권장한다.
  https://matplotlib.org/devel/index.html#developers-guide-index

공식적으로 2가지 스타일이 지원된다. 그러므로 사용자가 선호하는 방법으로 matplotlib을 이용하면된다. 

  MATLAB 스타일

먼저 MATLAB 스타일에 대해서는 import를 할때 다음과 같이 한다. 

from pylab import *

이 스타일은 모듈 하나로 플롯의 형성을 위한 pyplot의 기능과 입력 배열생성을 위한 numpy 배열 생성을 동시에 할 수 있다. 또한 MATLAB과 유사하게 플롯함수나 배열생성함수들을 module.function()형태가 아닌 function()형태로 바로 불러다 쓸 수 있는 장점이 있다. 즉, MATLAB 사용자들에게 굉장히 친숙한 스타일이다.
하지만 위에서 언급하였듯이 네임스페이스를 오염시킬 가능성이 크며, 복잡한 코드에서는 사용하는데 혼동을 일으킬 가능성이 크다.  
 

  pyplot 스타일

먼저 pyplot 스타일에 대해서는 전형적으로 import를 할때 다음과 같이 한다. 

import matplotlib.pyplot as plt
import numpy as np

입력을 위해 numpy로 입력 배열을 구성할 수 있고 기타 수학적 함수가 필요하다면 이용할 수 있다.
pyplot 인터페이스 및 오브젝트 메서드를 사용하여 플롯을 작성한다.
 
그래서 왜 MATLAB 스타일(전역 상태와 flat 네임스페이스와 연관된) 대신에 추가적인 타이핑을 하는 것일까?

  ○ 매우 심플한 상황에 대해서는, 유일한 이점은 학술적인면만 있다.

  ○ 더 장황한 스타일에서는 어떤 객체가 어디서 오고 어떻게 진행되는지 더 분명하고 명확하다. 

  ○ 더 복잡한 어플리케이션에 대해서는 분명함과 명확함이 더욱 중요하게된다.

  ○ 더욱 가치있고 더욱 완벽한 객체지향 인터페이스는 프로그램을 더 작성하기 쉽고 유지하기 쉽게 만든다.



 

 

 

 

참고자료

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

 https://realpython.com/python-matplotlib-guide/

 

 

 

 


반응형

댓글