Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
Python/matplotlib

[matplotlib] Object Oriented Style Tutorial

by ds31x 2024. 6. 3.

Matplotlib Object Oriented Style Tutorial

1. Introduction

Matplotlib은 Python의 2D plotting library로, 다양한 그래프와 플롯을 생성하는 데 사용됨.

2024.03.04 - [Python/matplotlib] - [matplotlib] matplotlib란

 

[matplotlib] matplotlib란

Matplotlib은 Python에서 가장 널리 사용되는 Data Visualization Library임. matplotlib를 통해 chart(차트),image(이미지) 및,다양한 visual representation of data이 가능함.pyplot 모듈을 통해 공학 계산 및 visualization으로

ds31x.tistory.com

 

Object Oriented Style은 Scripting Style에 비해 더 많은 유연성과 제어를 제공함.

2024.06.02 - [Python/matplotlib] - [matplotlib] Scripting Layer vs. Artist Layer

 

[matplotlib] Scripting Layer vs. Artist Layer

Scripting Layer vs. Artist LayerMatplotlib는Scripting Layer와 (이를 이용시 scripting style 이라고 불림)Artist Layer 라는 (이를 이용시 object-oriented style 이라고 불림)두 가지 주요 인터페이스를 plot을 그리기 위해

ds31x.tistory.com

 

2023.07.20 - [Python/matplotlib] - [Python] matplotlib : backend란

 

[Python] matplotlib : backend란

matplotlib: backend란 matplotlib의 backend 관련자료를 정리한 문서임.Matplotlib ArchitectureMatplotlib 아키텍트는 다음과 같이 크게 3가지 레이어로 구성된다.Backend Layer :상위 layer에서 graph를 생성하는데 초점

ds31x.tistory.com


plt.ion()을 이용하면 학습할 때 보다 도움이 됨.

2025.03.24 - [Python/matplotlib] - [matplotlib] plt.ion 과 plt.ioff 를 통한 대화형으로 그래프 그리기

 

[matplotlib] plt.ion 과 plt.ioff 를 통한 대화형으로 그래프 그리기

이 문서는Python REPL(Read-Eval-Print Loop) 환경에서matplotlib을 대화형(interactive)으로 사용하는 예제임. plt.ion() 은 interactive on을 줄인 이름 그대로, matplotlib의 interactive mode를 활성화함.IPython shell이나 Python

ds31x.tistory.com


2. 기본적인 Figure와 Axes 생성

Object Oriented Style 에서 그래프를 그리기 위해 먼저 Figure 객체와 하나 이상의 Axes 객체를 생성해야 함.

  • Figure는 전체 그래프의 컨테이너이고,
  • Axes는 실제 데이터가 그려지는 영역임.
import matplotlib.pyplot as plt

# Figure 객체 생성
fig = plt.figure()  # 전체 그림을 위한 Figure 객체를 생성함

# Axes 객체 추가
ax = fig.add_subplot(1, 1, 1)  # 1행 1열의 그리드에 첫 번째 Axes를 추가함

2023.07.14 - [Python/matplotlib] - [Python] matplotlib 의 계층구조 및 Container : Figure, Axes, Axis

 

[Python] matplotlib 의 계층구조 및 Container : Figure, Axes, Axis

matplotlib의 계층구조 matplotlib는 다음과 같은 hierarchical structure를 가지고 있음. 일반적으로 Figure는 하나 이상의 Axes를 가지며(포함하며), Axes는 일반적으로 2개의 Axis 를 포함(2D image인 경우)함. (Axis

ds31x.tistory.com


3. Plotting 데이터

Axes 객체를 사용하여 데이터를 plot(플롯)할 수 있음.

 

plot() 메소드는 line graph 를 그리는 데 사용됨.

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 데이터를 플롯
ax.plot(x, y)  # Axes 객체의 plot() 메소드를 사용하여 데이터를 플롯함

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

5. Figure와 Axes의 생성 방법 

FigureAxes를 한 번에 생성하는 간단한 방법도 있음.

plt.subplots() 함수는 Figure와 하나 이상의 Axes를 동시에 생성함.

fig, ax = plt.subplots()  # Figure와 Axes 객체를 동시에 생성함

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 데이터를 플롯
ax.plot(x, y)  # 데이터를 플롯

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

2023.07.20 - [Python/matplotlib] - [Python] matplotlib: Figrure and Axes

 

[Python] matplotlib: Figrure and Axes

Figure and Axes Figure의 instance는 matplotlib가 그리는 그림 하나당 하나가 할당되며, 그림이 그려질 canvas 영역을 제공한다. Figure는 1개 이상의 Axes를 가질 수 있음. Axes의 instance는 Figure가 제공하는 전체

ds31x.tistory.com


5. 여러 개의 Axes 생성 **

하나의 Figure에 여러 개의 Axes를 생성하여 subplot을 만들 수 있음.

 

plt.subplots() 함수에 행과 열의 개수를 인자로 전달하여 여러 개의 Axes를 생성.

fig, axs = plt.subplots(2, 2)  # 2행 2열의 그리드에 4개의 Axes 객체를 생성함

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 각 Axes에 데이터를 플롯
for ax in axs.flat:
    ax.plot(x, y)  # 각 Axes 객체에 데이터를 플롯함

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

6. Axes 객체의 꾸미기

Axes 객체를 사용하여 그래프의 제목, 축 레이블 등을 설정할 수 있음.

  • set_title(),
  • set_xlabel(),
  • set_ylabel()

메소드를 사용하여 제목과 축 레이블을 설정함.

또한, 축을 숨기거나 그리드를 추가할 수도 있음.

fig, ax = plt.subplots()  # Figure와 Axes 객체를 동시에 생성함

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 데이터를 플롯
ax.plot(x, y)  # 데이터를 플롯

# 제목과 축 레이블 설정
ax.set_title('Sample Plot')  # 그래프 제목 설정
ax.set_xlabel('X Axis')  # X축 레이블 설정
ax.set_ylabel('Y Axis')  # Y축 레이블 설정

# 그리드 추가
ax.grid(True)  # 그리드를 추가함

# 축 숨기기
ax.spines['top'].set_visible(False)  # 상단 축 숨기기
ax.spines['right'].set_visible(False)  # 우측 축 숨기기

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

2023.07.14 - [Python/matplotlib] - [Python] matplotlib : Axis Scale and Ticks

 

[Python] matplotlib : Axis Scale and Ticks

각 Axes객체는 2개 이상의 Axis 객체를 가짐 (2D chart일 경우, x-axis와 y-axis를 가지므로 2개임). Axis는 주로 축의 scale과 tick locator, tick formatter를 제어한다. Scales 많이 사용되는 scale은 다음과 같음 'linear

ds31x.tistory.com

2023.08.08 - [Python/matplotlib] - [Python] matplotlib : x축과 y축을 그리기.

 

[Python] matplotlib : x축과 y축을 그리기.

schematic graphs 에서는 아래 그림처럼 y, x가 각각 0인 x-axis, y-axis가 그려지고 그 위에 graph가 그려지는 경우가 많다 (사람 손으로 그릴 경우 대부분이 이 경우이다.) matplotlib에서도 여러 방법으로

ds31x.tistory.com


7. Bar Chart 생성

Axes 객체를 사용하여 bar chart(막대 그래프)를 그릴 수 있음.

 

bar() 메소드는 bar chart를 생성하는 데 사용됨.

fig, ax = plt.subplots()  # Figure와 Axes 객체를 동시에 생성함

# 데이터 생성
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 25]

# 막대 그래프 생성
ax.bar(categories, values)  # Axes 객체의 bar() 메소드를 사용하여 막대 그래프를 생성함

# 제목과 축 레이블 설정
ax.set_title('Bar Chart')  # 그래프 제목 설정
ax.set_xlabel('Categories')  # X축 레이블 설정
ax.set_ylabel('Values')  # Y축 레이블 설정

# 그리드 추가
ax.grid(True, axis='y')  # Y축에 그리드를 추가함

# 축 숨기기
ax.spines['top'].set_visible(False)  # 상단 축 숨기기
ax.spines['right'].set_visible(False)  # 우측 축 숨기기

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

8. Pie Chart 생성

Axes 객체를 사용하여 pie chart(원형 차트)를 그릴 수 있음.

pie() 메소드는 pie chart를 생성하는 데 사용됨.

fig, ax = plt.subplots()  # Figure와 Axes 객체를 동시에 생성함

# 데이터 생성
labels = ['A', 'B', 'C', 'D']
sizes = [20, 30, 25, 25]

# 원형 차트 생성
ax.pie(sizes, labels=labels, autopct='%1.1f%%')  # Axes 객체의 pie() 메소드를 사용하여 원형 차트를 생성함

# 제목 설정
ax.set_title('Pie Chart')  # 그래프 제목 설정

# 축 숨기기 (원형 차트는 축을 숨기는 것이 일반적임)
ax.axis('equal')  # 원형 차트가 원형으로 보이도록 함

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

9. Scatter Plot 생성

Axes 객체를 사용하여 scattergram를 그릴 수 있음.

scatter() 메소드는 scatter plot를 생성하는 데 사용됨.

fig, ax = plt.subplots()  # Figure와 Axes 객체를 동시에 생성함

# 데이터 생성
x = [1, 2, 3, 4, 5]
y = [10, 20, 25, 30, 40]

# 산점도 생성
ax.scatter(x, y)  # Axes 객체의 scatter() 메소드를 사용하여 산점도를 생성함

# 제목과 축 레이블 설정
ax.set_title('Scatter Plot')  # 그래프 제목 설정
ax.set_xlabel('X Axis')  # X축 레이블 설정
ax.set_ylabel('Y Axis')  # Y축 레이블 설정

# 그리드 추가
ax.grid(True)  # 그리드를 추가함

# 축 숨기기
ax.spines['top'].set_visible(False)  # 상단 축 숨기기
ax.spines['right'].set_visible(False)  # 우측 축 숨기기

# 그래프 표시
plt.show()  # 전체 Figure를 화면에 표시함

 


10. 결론

Matplotlib의 Object Oriented Style복잡한 플롯을 작성하고 세부적으로 제어할 수 있는 강력한 방법임.
FigureAxes 객체를 생성하고 데이터를 plot하는 기본 개념을 이해하면 더욱 다양한 시각화를 구현할 수 있음.


같이 읽어보면 좋은 자료들

https://matplotlib.org/stable/tutorials/index.html

 

Tutorials — Matplotlib 3.9.0 documentation

 

matplotlib.org

2023.07.21 - [Python/matplotlib] - [Python] matplotlib : line 및 marker 설정하기.

 

[matplotlib] line 및 marker 설정하기.

기본적으로 graph에서 사용되는 line 및 marker의 스타일 (유형, 굵기, 색, 마커)을 변경하는 것은Axes에서 제공하는 다양한 graph를 그리는 모든 메서드들에서 필요하기 때문에 공통적인 parameters가 제

ds31x.tistory.com

2024.03.18 - [Python/matplotlib] - [matplotlib] patches: 도형 그리기.

 

[matplotlib] patches: 도형 그리기.

patches 는 모듈은 Artist 의 subclass인 Patch 클래스들을 제공하여, 다음의 다양한 2D 도형을 쉽게 그릴 수 있게 해줌. Arc (호), Circle (원), CirclePolygon (원의 근사 다각형), Ellipse (타원), Arrow (화살표), FancyA

ds31x.tistory.com