"지윤 씨, 인터넷에서 Matplotlib 예제 찾아보면 코드가 두 가지 스타일인 거 느껴봤어요?"
팀장이 질문했다. 지윤은 고개를 끄덕였다. 어제 예제를 찾아보다가 똑같은 그래프인데 코드가 다른 걸 보고 혼란스러웠다.
"맞아요. 어떤 건 plt.plot()으로 시작하고, 어떤 건 fig, ax = ...로 시작하던데 뭐가 다른 거예요?"
"그게 Matplotlib을 처음 배우는 사람이 가장 먼저 부딪히는 질문이에요. 오늘 그걸 명확히 정리해드릴게요."
가장 짧은 코드
먼저 가장 단순한 코드로 그래프를 그립니다.
import matplotlib.pyplot as plt# 데이터months = [1, 2, 3, 4, 5, 6]sales = [120, 145, 130, 160, 175, 190]# 그래프plt.plot(months, sales)plt.title('월별 매출')plt.xlabel('월')plt.ylabel('매출 (만원)')plt.show()

이 코드가 동작하는 이유는, plt.plot()을 호출하는 순간 Matplotlib이 내부적으로 Figure와 Axes를 자동으로 만들어주기 때문입니다. 우리는 그 내부를 보지 못하지만, 분명히 존재합니다.
Figure, Axes, Axis — Matplotlib의 세 가지 구성요소
그래프 하나를 만들면 실제로는 세 가지 객체가 생성됩니다.
Figure (도화지)
└── Axes (그래프 영역)
├── Axis X (x축)
└── Axis Y (y축)
| 객체 | 역할 | 비유 |
|---|---|---|
Figure |
전체 캔버스 | 도화지 |
Axes |
실제 그래프가 그려지는 영역 | 도화지 위의 그래프 |
Axis |
각 축 (x축, y축) | 자 |
한 Figure 안에 여러 Axes가 있을 수 있습니다. 이것이 서브플롯입니다.
두 가지 방식의 선택 기준
| 상황 | 권장 방식 |
|---|---|
| 그래프 1개, 간단한 시각화 | pyplot (plt.*) |
| 그래프 여러 개 (서브플롯) | 객체지향 (fig, ax) |
| 세밀한 커스터마이징 | 객체지향 (fig, ax) |
| 함수 안에서 Figure를 반환 | 객체지향 (fig, ax) |
다음 절에서 두 방식의 차이를 코드로 비교합니다.