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() 메소드를 이용하면 데이터 범위를 설정할 수 있다.
- 각 Axes는 set_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() 함수에는 응답하는 경우가 있는데, 이는 주피터 노트북의 오류이다.
- 함수 실행 논리에 어긋나지만, 주피터 노트북은 반응형으로 처리된다는 것으로 이해하면 된다.
- plot() 함수를 실행할 때 바로 그래프가 나타나고 show() 함수에는 응답하는 경우가 있는데, 이는 주피터 노트북의 오류이다.
- 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() 함수의 매개 변수인 **kwargs는 Line2D의 속성이며, 대표적인 속성은 다음과 같다.
속성 | 내용 |
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 |
728x90
그리드형(광고전용)
'In-depth Study > matplotlib' 카테고리의 다른 글
[matplotlib] matplotlib API (0) | 2022.06.02 |
---|---|
[matplotlib] 맷플롯립(matplotlib) 개요 (0) | 2022.06.01 |