본문 바로가기
Python/Matplotlib

Matplotlib개요와 plot의 구성요소 - matplotlib(1)

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

파이썬 버전 3.7 기준

matplotlib 버전 3.0.3 기준



  Matplotlib개요와 Figure의 구성


본 포스팅에서는 matplotlib의 개요와 figure의 구성에 대해 다룬다.



  개요


matplotlib는 새로운 사용자들에게는 다소 어려울 수 있는 코드베이스를 가지고 있다. 하지만 matplotlib의 대부분은 몇 가지 중요한 점을 중심으로 꽤 단순한 개념 체계에 관한 지식만 익힌다면 쉽게 이해할 수 있다.


플로팅(plotting)은 가장 일반적인 것(2D 배열을 컨투어하는 조작)부터 가장 구체적인 것(스크린의 컬러 조작)까지 광범위한 조작을 필요로 한다. 플로팅 패키지의 목적은 데이터를 시각화하는데 있어 모든 필요한 도구를 사용하여 가능한 쉽게 사용자를 지원하는 것이다. 이때 높은 수준의 커맨드가 사용될 수 있으며, 필요한 경우 낮은 수준의 커맨드 역시 사용될 수 있다. 


다야한 수준의 커맨드를 구사하기 위해 matplotlib에 있는 모든 것은 계층화되어 있다. 계층의 가장 높이 있는 것은 matplotlib.pyplot 모듈에 의해 제공되는 사용환경(state-machine environment)이 있다. 이 단계에서는, 플롯 요소들(선, 이미지, 텍스트)을 그래프와 축에 추가하기 위해 단순한 함수가 사용되어진다.


최상층의 계층(matplotlib.pyplot)에서 바로 아랫단계는 객체지향적 인터페이스의 첫 단계이다. 이 단계에서 pyplot은 figure 작성과 같은 적은 수의 함수를 사용하는데 필요하며, 사용자는 figure와 축 오브젝트의 만들고 파악한다. 그리고 사용자는 만들어진 figure을 통해 하나 혹은 더 많은 축 오브젝트를 만드는 것도 가능하다. 이 축 오브젝트들은 대부분의 플롯팅 조작에 사용될 수 있다.


더욱 중요한 컨트롤에 대해서는, pyplot의 레벨은 완전히 객체지향 접근 방법만 남아있는 단계로 내려갈 것이다.


참고사항

  pyplot의 사용 환경(state-machine environment)은 MATLAB과 유사하기 때문에, MATLAB 사용자에게는 굉장히 친숙하다.



  Figure의 구성과 입력 자료형


다음 그림은 Figure의 구성요소를 보여준다. 출처는 포스팅 가장 아래 참고자료에 있다.

../../_images/anatomy.png


  Figure

위의 전체 그림이 Figure이다. 위에서 보여지는 Figure는 파생 축과 약간의 특별한 Artists(titles, figure legends, etc), 그리고 캔버스(Canvas)를 보여준다. 

figure는 다수의 축을 사용할 수 있으나, 최소한 하나 이상의 축을 가져야 한다.

(캔버스에 대해서는 깊게 생각할 필요없다. 실제로 플롯을 그리는 오브젝트가 중요하다. 사용자로써는 더 혹은 덜 보여지지 않는 영역이다.)


  Axes

Axes는 플롯으로써 여겨지고, 데이터 공간이 있는 이미지의 영역이다. 

Figure는 다수의 축들(Axes)을 포함할 수 있으나, 축 오브젝트(Axis object)는 하나의 Figure에만 있을 수 있다. 

Axes은 데이터 한계까지 처리할 수 있는 2개(3D인 경우 3개)의 축(Axis) 오브젝트를 포함한다. 

각 축의 데이터의 범위는 set_xlim(), set_ylim()와 같은 Axes 메서드를 이용하여 제어될 수 있다.

각각의 Axes는 타이틀(set_title())과 x축 라벨(set_xlabel()), y축 라벨(set_ylabel)을 포함한다.


  Axis

Axis(축)은 숫자라인과 유사한 오브젝트들이다. 

Axis(축) 오브젝트는 그래프의 한계를 셋팅하는 것과 tick(틱, 축 위에 마커들)과 tick label(틱 라벨링을 위한 문자열)을 만드는 것을 처리한다. 

틱의 위치는 Locator 오브젝트에 의해 결정되고, tick라벨 문자열은 Formatter 오브젝트에 의해 포멧팅된다. 두 오브젝트의 조합은 틱의 위치와 라벨에 대해 매우 정교한 제어를 할 수 있게 한다.


  Artist

기본적으로 사용자가 Figure에서 볼 수 있는 모든 것(Figure, Axes, Axis 오브젝트도 포함)이 Artist이다. 

이것은 Text 오브젝트와 Line2D 오브젝트, collection 오브젝트, Patch 오브젝트, 기타 등등이 포함된다. 

Figure가 그려질 때 모든 artist는 캔버스에 그려진다. 

대부분의 Artists는 Axes에 엮여있으며, 다중의 Axes를 공유할 수 없고, 다른 Axes로 옴겨질 수 없다.



  플로팅 함수로의 입력 타입

모든 플로팅 함수는 np.array 혹은 np.ma.masked_array를 입력으로 여긴다. 

array와 유사한 class들을(예를들어 pandas의 데이터 객체들, np.matrix) 입력으로 사용하면, 제대로 작동할지 안할지 확신할 수 없다. 

따라서 플로팅을 할 때에는 np.array로 치환한 후 사용하는 것이 최고의 방법이다.

pandas의 경우 value 메서드를 사용할 수 있고, numpy의 경우 asarray() 함수를 이용할 수 있다.


치환 예제)

# 예제를 위한 pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# pandas의 DataFrame에서 numpy.array로의 변환

In[4]: x = pd.DataFrame(np.ones([3,3]), columns = ['a','b','c'])

In[5]: x

Out[5]: 

     a    b    c  

0  1.0  1.0  1.0

1  1.0  1.0  1.0

2  1.0  1.0  1.0


In[6]: x_np = x.values

In[7]: x_np

Out[7]: 

array([[1., 1., 1.],

       [1., 1., 1.],

       [1., 1., 1.]])


# numpy.matrix에서 numpy.array로의 변환

In[8]: y = np.matrix([[1,2,3],[1,2,3]])

In[9]: y

Out[9]: 

matrix([[1, 2, 3],

        [1, 2, 3]])

In[10]: y_np = np.asarray(y)

In[11]: y_np

Out[11]: 

array([[1, 2, 3],

       [1, 2, 3]])


  Figure 출력 예제


아래 예제는 단순한 Figure를 그리는 예제이다.


Figure 예제)

# pyplot의 import

In[24]: import matplotlib.pyplot as plt


# Figure 출력 예제 

In[25]: Fig = plt.figure()                             # 스크립트 창에서 치면 Figure를 윈도우를 출력

In[26]: Fig.suptitle('No figure example')         # 출력된 Figure에 title을 삽입

Out[26]: Text(0.5,0.98,'No figure example') 

In[27]: Fig, ax_lst = plt.subplots(1,2)             # 새로운 Figure를 만들고 subplot을 작성


출력된 Figure)




 

 

 

 

 참고자료

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

 

 

 

 


반응형

댓글