별의 공부 블로그 🧑🏻‍💻
728x90
728x170

matplotlib 기본

  • matplotlib 계층적으로 구성된다.
  • 이 계층 구조의 최상위는 pyplot 모듈이 제공하는 matplotlib 상태 머신(State-Machine) 환경이다.
    • 상태 머신 : 주어진 시간에 어떤 상태 정보를 저장하는 컴퓨터와 같은 장치
  • 최상위 계층에서 사용되는 간단한 함수들은 에 그래프 요소인 선, 그림, 텍스트 등을 추가한다.

 

figure 구성

  • matplotlib에서 제공하는 figure는 모든 축(axis), 캔버스(canvas), 제목(title), 범례(legend) 등으로 구성된다.
  • 객체는 크게 Figure 객체, Axes 객체, Axis 객체 등으로 구분된다.
    • Figure 객체는 Axes 객체들을 포함하고, Axes 객체는 Axis 객체들을 포함한다.
  • 전체 영역캔버스, Axes 객체그래프, Axis 객체을 의미한다.

 

  • Figure 객체를 생성하려면 먼저 다음과 같이 pyplot 모듈을 임포트한다.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

fig = plt.figure()    # 축이 없는 빈 figure 생성
더보기
<Figure size 432x288 with 0 Axes>

 

>>> fig.suptitle('No axes on this figure')    # 제목(title) 추가
Text(0.5, 0.98, 'No axes on this figure')    # x 위치 : 0.5, y 위치 : 0.98

 

  • 앞과 같이 속성을 적용한 후 Axes에서 2x2 그리드인 서브플롯 객체 4개를 생성한다.
fig, ax_lst = plt.subplots(2, 2)

 

fig

 

  • fig의 타입이 Figure 객체임을 확인할 수 있다.
>>> type(fig)
matplotlib.figure.Figure

 

  • ax_lst numpy.ndarray 객체임을 확인할 수 있다.
>>> ax_lst
array([[<AxesSubplot:>, <AxesSubplot:>],
       [<AxesSubplot:>, <AxesSubplot:>]], dtype=object)
       
>>> type(ax_lst)
numpy.ndarray

 

Axes, Axis, Artist

Axes 객체

  • Axis 객체, 제목, 라벨 등과 함께 Figure 전체 영역에 포함된다.
  • figure 는 많은 Axes 객체를 포함할 수 있지만, Axes 객체는 1개의 Figure 객체 안에만 존재한다.
  • Axes 객체는 데이터 범위(limits)를 관리하는 2개Axis 객체를 포함하여 3차원인 경우 3개Axis 객체를 포함한다.
  • Axes 객체에 속한 set_xlim() set_ylim() 메소드를 이용하면 데이터 범위를 설정할 수 있다.
  • Axesset_title() 로 설정되는 제목, set_xlabel() 로 설정되는 x-label 그리고 set_ylabel() 로 설정되는 y-label 을 포함한다.

 

Axis 객체

  • figure 의 범위 설정을 관리하는 숫자, 선과 같은 객체
  • 축 위의 눈금(tick)눈금 이름(ticklabels) 생성을 관리한다.
  • 눈금 위치Locator 객체로, 눈금 이름Formatter 객체로 설정한다.
  • Locator와 Formatter 객체를 올바르게 조합하면 눈금 위치와 라벨을 정교하게 제어할 수 있다.

 

Artist 객체

  • 기본적으로 Figure, Axes, Axis 객체 등 figure에 볼 수 있는 모든 것아티스트(Arist)이다.
  • 아티스트는 Text 객체, Line2D 객체, Collection 객체, Patch 객체 등도 포함한다.
  • figure를 표현할 때 모든 아티스트를 캔버스에 그리며, 대부분의 아티스트는 Axes에 종속된다.

 

matplotlib과 pyplot

  • matplotlib 패키지 또는 모듈이라고도 한다.
  • matplotlib 3.3.2 버전은 총 72개 서브 모듈로 구성되며, 서브 모듈은 함수, 클래스, 메소드 및 속성들 로 구성된다.
  • matplotlib에 속한 모듈 중, matplotlib.pyplot 을 가장 많이 사용한다.
    • pyplot 모듈에 있는 함수를 이용하면 그래프와 축들을 구현할 수 있다.

 

  • 다음 예제에서 plot() 함수에 전달하는 x는 넘파이 배열 객체인 numpy.ndarray 이므로, 함수에 입력하기 적합하다.
>>> x = np.linspace(0, 2, 100)
>>> type(x)
numpy.ndarray

 

  • 다음 예제는 첫 번째 plt.plot 호출로 axes 를 생성한 후 다음, plt.plot 호출로 1, 2, 3차 방정식을 같은 x축과 y축에 선으로 나타낸다.
  • 이후 plt.xlabel plt.ylabel x축과 y축 이름을, plt.title 그래프 제목을, plt.legend 범례를 각각 추가한다.
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic', linestyle='dashed')
plt.plot(x, x**3, label='qubic')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title('Simple Plot')
plt.legend()
plt.show()

 

 

pyplot 모듈

  • pyplot 모듈은 matplotlib이 MATLAB과 같이 작용하도록 하는 명령 스타일 함수들의 모음이며, matplotlib상태 기반 인터페이스이다.
    • MATLAB : 엔지니어와 과학자를 위해 설계된 프로그래밍 플랫폼으로써, 수학 계산을 가장 자연스럽게 표현하도록 하는 매트릭스 기반의 언어
  • 이러한 함수들은 figure 를 생성하고 figure 그래프 공간을 만들고 그래프 공간에 을 추가하거나 그래프에 라벨을 추가하는 등의 작업을 한다.
  • pyplot 을 이용하면 간단하고 빠르게 시각화 할 수 있다.
  • 파이썬 셀주피터 노트북pyplot 코드를 실행하는 데 약간의 차이가 있다.
    • show() 함수를 처리하는 주피터 노트북의 처리 매커니즘이 파이썬과 다르다. 
      • 파이썬 셀에서 코드를 실행하면 각각의 코드가 개별적으로 처리되어 바로 결과를 확인할 수 있다.
      • 주피터 노트북에서 일괄 실행하면 원하는 결과를 얻을 수 있다.
        • plot() 함수를 실행할 때 바로 그래프가 나타나고 show() 함수에는 응답하는 경우가 있는데, 이는 주피터 노트북의 오류이다.
          • 함수 실행 논리에 어긋나지만, 주피터 노트북은 반응형으로 처리된다는 것으로 이해하면 된다.
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()

 

  • plt.plot([1, 2, 3, 4]) 는 다음 표의 plot(y)에 해당한다.
    • y축 좌표에 1, 2, 3, 4로 할당된다.
  • x축은 N-1이므로 0, 1, 2, 3이 x축에 매핑되며, 기울기가 1인 그래프를 자동으로 그린다.
  • 옵션 매개 변수 fmt 색(color), 마커(marker) 및 선 스타일(line style)과 같은 기본 형식을 정할 때 사용할 수 있다.
적용 예 기능
plot(x, y) 기본으로 설정된 선 스타일과 색을 이용해 x-y 그래프를 그린다.
plot(x, y, 'bo') 파란 원 마커를 사용하여 x-y 그래프를 그린다.
plot(y) 0부터 N-1을 x의 인덱스 배열로 사용해 y 그래프를 그린다.
plot(y, 'r+') plot(y)와 동일하나 마커 모양이 빨간 + 이다.

 

  • 그래프를 그릴 때 color, marker 등과 같은 Line2D 속성을 사용하면 그래프 스타일을 세밀하게 제어할 수 있다.
  • 선 속성과 fmt 는 혼용할 수 있으며, 다음 예제에서 2개의 plot 호출은 동일한 결과를 나타낸다.
  • fmt 와 키워드 인수가 상충할 때는 키워드 인수가 우선순위를 갖는다.
  • g1-- 에서 g는 인 green, 1은 마커, --는 선 스타일이며 이 순서는 변경할 수 있다.
>>> x = np.linspace(0, 2, 100)
>>> y = np.linspace(0, 1, 100)
>>> plt.plot(x, y, 'g1--', linewidth=2, markersize=12)
[<matplotlib.lines.Line2D object at 0x000002AEDD21FE20>]

>>> plt.plot(x, y, color='green', marker=1, linestyle='dashed', linewidth=2, markersize=12)
[<matplotlib.lines.Line2D object at 0x000002AED6D662C0>]

>>> plt.show()

 

  • plot() 함수의 매개 변수인 **kwargsLine2D의 속성이며, 대표적인 속성은 다음과 같다.
속성 내용
color 또는 c 색상
fillstyle {'full', 'left', 'right', 'bottom', 'top', 'none'}
linestyle 또는 ls {'-', '--', '-.', ':', '.', (offset, on-off-seq), ...}
linewidth 또는 lw 선 너비
marker 마커 스타일
marker 또는 ms 선 너비(실수)
url str
visible 불리언
xdata 1D Array
ydata 1D Array

 

  • 포맷 문자열마커, 선스타일, 색상으로 구성되며 다음 예제와 같이 사용할 수 있다.
fmt = '[marker][line][color]'
포맷 문자열 내용
'b' 기보 모양의 파란색 마커
'or' 빨간색 원
'-g' 초록색 실선(solid line)
'--' 기본 색상의 파선(dashed line)
'^k' 점선(dotted line)에 의해 연결된 검은색의 삼각형 마커

 

  • 마커 문자의 종류는 다음과 같다.
마커 문자 내용 마커 문자 내용
'.' 점(point) 's' 사각형(square)
',' 쉼표(pixel) 'p' 오각형(pentagon)
'o' 원(circle) '*' 별(star)
'v' 역삼각형(triangle_down) 'h' 육각형1(hexagon1)
'^' 삼각형(triangle_up) 'H' 육각형2(hexagon2)
'<' 왼쪽 삼각형(triangle_left) '+' 더하기표(plus)
'>' 오른쪽 삼각형(triangle_right) 'x' x
'1' 역삼각형(tri_down) 'D' 다이아몬드(diamond)
'2' 삼각형(tri_up) 'd' 얇은 다이아몬드(thin_diamond)
'3' 왼쪽 삼각형(tri_left) '|' 수직선(vline)
'4' 오른쪽 삼각형(tri_right) '_' 수평선(hline)

 

  • 선 스타일 종류는 다음과 같다.
문자 내용
'-' 실선 스타일
'--' 파선 스타일
'-.' 일점쇄선 스타일
':' 점선 스타일

 

  • pyplot 모듈에서 지원하는 색상은 다음과 같다.
문자 색상
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white

 

 

matplotlib.pyplot.plot — Matplotlib 2.1.2 documentation

Plot lines and/or markers to the Axes. args is a variable length argument, allowing for multiple x, y pairs with an optional format string. For example, each of the following is legal: If x and/or y is 2-dimensional, then the corresponding columns will be

matplotlib.org

 

728x90
그리드형(광고전용)

'In-depth Study > matplotlib' 카테고리의 다른 글

[matplotlib] matplotlib API  (0) 2022.06.02
[matplotlib] 맷플롯립(matplotlib) 개요  (0) 2022.06.01
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖