Matplotlib

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Matplotlib는 MATLAB과 유사한 인터페이스를 제공하는 파이썬 기반의 2차원 및 3차원 플롯을 지원하는 라이브러리이다. MATLAB만큼 사용하기 쉽도록 설계되었으며, 다양한 플롯 유형을 제공한다. Matplotlib는 파이썬의 장점을 활용하여 자유-오픈 소스, SVG 지원, 대규모 소프트웨어 개발 가능성을 제공한다. Matplotlib 기능을 확장하는 다양한 툴킷이 있으며, 애니메이션 기능도 지원한다.

Matplotlib - [IT 관련 정보]에 관한 문서
📚 더 읽어볼만한 페이지
  • 파이썬 라이브러리 - Tkinter
    Tkinter는 Tcl/Tk 툴킷을 파이썬 래퍼로 구현한 GUI 표준 라이브러리로서, 다양한 위젯과 배치 관리자를 제공하며 테마 Tk 기능을 통해 위젯 외관을 변경할 수 있도록 지원한다.
  • 파이썬 라이브러리 - SciPy
    SciPy는 NumPy 배열 구조를 기반으로 수치 적분, 선형 대수, 최적화, 통계 등 과학 및 공학 계산에 사용되는 다양한 기능을 제공하는 파이썬 과학 컴퓨팅 라이브러리이다.
  • 파이썬으로 작성된 자유 소프트웨어 - 캘리버
    캘리버는 다양한 전자책 파일 형식과 단말기를 지원하는 오픈소스 소프트웨어로, 편집, 변환, 메타데이터 관리, 라이브러리 검색, 온라인 콘텐츠 수집, 원격 액세스, 전자책 제작 등의 기능을 제공하며, 플러그인을 통해 DRM 제거도 가능하다.
  • 파이썬으로 작성된 자유 소프트웨어 - 클램윈
    클램윈은 ClamAV 엔진 기반의 오픈 소스 백신 소프트웨어로, 트로이 목마, 바이러스, 멀웨어 등 다양한 악성 위협 분석 자료를 제공하며 예약 검사, 수동 검사, 컨텍스트 메뉴 통합 등의 기능을 지원하지만 실시간 감시 기능은 제공하지 않는다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.

2. MATLAB과의 비교

Pyplot은 MATLAB과 유사한 인터페이스를 제공하는 Matplotlib 모듈이다. Matplotlib은 Python을 사용할 수 있고, 무료이며 오픈 소스라는 장점을 활용하여 MATLAB만큼 사용하기 쉽도록 설계되었다. matplotlib의 pylab 인터페이스는 MATLAB 사용 경험이 있는 사용자가 matplotlib를 쉽게 습득할 수 있도록 설계되었다.

Python, Numpy, matplotlib, SciPy 등을 조합하는 것은 MATLAB보다 다음과 같은 장점이 있다.

* MATLAB과 같은 특정 용도 언어가 아닌, 대규모 소프트웨어 개발도 가능한 현대적인 객체 지향 언어인 Python을 기반으로 한다.
* 빠르게 스크립트를 작성하는 데 적합하며, CGI 스크립트를 만들 수도 있다.
* 자유-오픈 소스이므로 라이선스 서버가 필요 없다.
* 네이티브 SVG를 지원한다.

3. 플롯 유형

Matplotlib는 다양한 종류의 2차원 및 3차원 플롯을 지원한다. 2차원 플롯에 대한 지원은 강력하며, 3차원 플롯은 2차원 플롯만큼 강력하지는 않지만 훌륭하게 지원하고 있다.

--
--
--
--

꺾은선 그래프
꺾은선 그래프

--
--

3.1. 2차원 플롯

Matplotlib는 다양한 종류의 2차원 및 3차원 플롯을 지원한다. 2차원 플롯에 대한 지원은 강력하다.

꺾은선 그래프

꺾은선 그래프 예시
꺾은선 그래프 예시


>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.linspace(0, 10, 100)
>>> b = np.exp(-a)
>>> plt.plot(a, b)
>>> plt.show()


히스토그램
히스토그램 예시
히스토그램 예시


>>> import matplotlib.pyplot as plt
>>> from numpy.random import normal, rand
>>> x = normal(size=200)
>>> plt.hist(x, bins=30)
>>> plt.show()


산점도
산점도 예시
산점도 예시


>>> import matplotlib.pyplot as plt
>>> from numpy.random import rand
>>> a = rand(100)
>>> b = rand(100)
>>> plt.scatter(a, b)
>>> plt.show()

3.2. 3차원 플롯



from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X2 + Y2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
plt.show()

Matplotlib는 3차원 플롯을 지원한다. 다만 3차원 플롯에 대한 지원은 2차원 플롯만큼 강력하지는 않다.

3.3. 예시

python
# 꺾은선 그래프 예시
import matplotlib.pyplot as plt
import numpy as np
a = np.linspace(0, 10, 100)
b = np.exp(-a)
plt.plot(a, b)
plt.show()
```
--

```python
# 히스토그램 예시
import matplotlib.pyplot as plt
from numpy.random import normal,rand
x = normal(size=200)
plt.hist(x, bins=30)
plt.show()
```
--

```python
# 산점도 예시
import matplotlib.pyplot as plt
from numpy.random import rand
a = rand(100)
b = rand(100)
plt.scatter(a, b)
plt.show()
```
--

```python
# 3D 그래프 예시
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X2 + Y2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
plt.show()
```
--

Matplotlib는 다양한 종류의 2차원 및 3차원 플롯을 지원한다.

--
--
--
--

Line plot
Line plot

--
--

4. 애니메이션

Matplotlib의 애니메이션 기능은 특정 데이터가 시간에 따라 어떻게 변화하는지 시각화하는 데 사용된다. 그러나 이 기능은 필요에 따라 다양하게 활용할 수 있다.

애니메이션은 프레임 번호(또는 시간)에 따라 정의된다. 즉, 프레임 번호를 입력으로 받아 Matplotlib Figure를 정의하거나 업데이트하는 함수를 정의해야 한다.

애니메이션 시작 이후 프레임 번호 시작 시점의 시간은 다음과 같이 계산할 수 있다.

* 시간 = (프레임 번호 - 1) / FPS

5. 툴킷

Matplotlib 기능을 확장하는 여러 툴킷이 있다. 일부는 별도로 다운로드해야 하며, 다른 일부는 Matplotlib 소스 코드와 함께 제공되지만 외부 종속성이 있다.

* Basemap: 다양한 지도 투영법, 해안선, 정치적 경계를 이용한 지도 그리기를 지원한다. 현재는 카토피(cartopy)의 사용이 권장된다.
* Cartopy: 객체 지향적 지도 투영 정의, 임의의 점, 선, 다각형, 이미지 변환 기능을 갖춘 매핑 라이브러리이다. (Matplotlib v1.2 이상)
* Excel 도구: 마이크로소프트 엑셀과 데이터 교환을 위한 유틸리티이다.
* GTK 도구: GTK 라이브러리 인터페이스이다.
* Qt 인터페이스
* Mplot3d: 3-D 플롯을 지원한다.
* Natgrid: 불규칙하게 배치된 데이터를 그리드화하기 위한 natgrid 라이브러리 인터페이스이다.
* tikzplotlib: LaTeX 문서로의 원활한 통합을 위해 Pgfplots로 내보내는 기능을 제공한다. (이전에는 matplotlib2tikz로 알려짐)
* Seaborn: Matplotlib 위에 API를 제공하여 플롯 스타일 및 색상 기본값에 대한 적절한 선택을 제공하고, 일반적인 통계 플롯 유형에 대한 간단한 고급 함수를 정의하며, Pandas에서 제공하는 기능과 통합된다.
* GeoPandas: PostGIS와 같은 공간 데이터베이스 없이 Python에서 지리 공간 작업을 단순화한다.
* Cartopy: 사용자가 투영법을 지정하고 한 줄의 코드로 해안선을 추가할 수 있도록 하여 matplotlib에서 지도 생성을 간소화한다.

6. 관련 프로젝트

Matplotlib의 기능을 확장하기 위한 몇 가지 툴킷이 존재한다. Matplotlib 소스 코드에 포함된 것도 있고, 별도로 다운로드해야 하는 것도 있다.

* 빅글스(Biggles)
* 차코(Chaco)
* DISLIN
* GNU 옥타브
* [https://github.com/dkogan/gnuplotlib/ gnuplotlib] – gnuplot 백엔드를 사용한 numpy용 플로팅
* Gnuplot-py
* PLplot – Python 바인딩 사용 가능
* SageMath – 플롯을 그리기 위해 `Matplotlib` 사용
* SciPy (모듈 `plt` 및 `gplt`)
* Plotly – 대화형 온라인 Matplotlib 및 Python 그래프
* Bokeh – 프레젠테이션을 위해 최신 웹 브라우저를 타겟으로 하는 Python 대화형 시각화 라이브러리
* Basemap: 다양한 투영법, 해안선, 정치적 국경에 따른 지도의 그리기
* 현재는 카토피(cartopy)의 사용이 권장된다.
* Mplot3d: 3차원 플롯
* Natgrid: natgrid 라이브러리용 인터페이스
* Excel tools: 마이크로소프트 엑셀(Microsoft Excel)과의 데이터 교환을 수행하는 유틸리티
* GTK tools: GTK 라이브러리용 인터페이스