matplotlib 기초: 첫 그래프 그리기

matplotlib의 Figure와 Axes 구조를 이해하고, 객체지향 방식으로 첫 그래프를 그리는 흐름을 정리합니다. plt.subplots부터 축 라벨·범례·저장까지 기본기를 한 번에 잡습니다.

· 5 min read · PALDYN Team

지난 글에서 흩어진 데이터를 하나로 모았다면, 다음 본능은 그것을 눈으로 보는 것이다. 숫자 표를 백 줄 들여다보는 것보다 그래프 하나가 추세를 훨씬 빨리 알려 준다. 파이썬 시각화의 사실상 표준은 matplotlib이고, pandas의 .plot()이나 seaborn도 그 위에서 돈다. 그래서 matplotlib의 기본 구조를 한 번 잡아 두면 이후 모든 시각화가 수월해진다.

Figure와 Axes: 도화지와 그래프

matplotlib를 처음 쓰면 가장 헷갈리는 것이 용어다. 핵심 두 가지만 구분하면 된다. Figure는 전체 도화지이고, Axes는 그 위에 놓이는 하나의 그래프 영역이다. 도화지 하나에 그래프 여러 개(여러 Axes)를 배치할 수도 있다.

Figure 안에 Axes가 들어 있다

여기서 주의할 점은 Axes가 “축(axis)“이 아니라 그래프 영역 전체를 뜻한다는 것이다. x축과 y축, 그 위의 선, 제목, 라벨이 모두 한 Axes 안에 들어 있다. 우리가 코드에서 가장 자주 다루는 객체가 바로 이 ax다.

객체지향 방식으로 첫 그래프

matplotlib에는 plt.plot(...)처럼 바로 그리는 간편한 방식도 있지만, 권장되는 것은 Figure와 Axes를 명시적으로 잡는 객체지향 방식이다. plt.subplots()가 둘을 한 번에 만들어 돌려준다.

기본 흐름: 만들고 → 그리고 → 꾸미고 → 보여 준다

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

fig, ax = plt.subplots()        # 도화지와 그래프 영역 생성
ax.plot(x, y, marker="o")       # 선 그래프 그리기
ax.set_xlabel("x")
ax.set_ylabel("y = x^2")
ax.set_title("첫 그래프")
plt.show()                      # 화면에 표시

흐름은 늘 같다. subplots()fig, ax를 만들고, ax에 데이터를 그리고, ax의 메서드로 축과 제목을 꾸미고, 마지막에 show()로 보여 준다. 복잡한 그래프일수록 이 명시적 방식이 “지금 어느 그래프를 건드리는가”를 헷갈리지 않게 해 준다.

여러 그래프를 한 화면에

subplots에 행·열 개수를 주면 격자 형태로 여러 Axes를 한 번에 만든다. 반환된 ax는 배열이라 인덱스로 각각 접근한다.

fig, axes = plt.subplots(1, 2, figsize=(10, 4))

axes[0].plot(x, y)
axes[0].set_title("선")

axes[1].bar(x, y)
axes[1].set_title("막대")

fig.tight_layout()    # 겹침 방지

figsize로 도화지 크기를(인치 단위), tight_layout()으로 라벨이 서로 겹치지 않게 간격을 자동 조정한다.

자주 쓰는 그래프 종류

Axes에는 그래프 종류별 메서드가 준비돼 있다. 데이터의 성격에 맞춰 고른다.

ax.plot(x, y)        # 선 — 추세, 시계열
ax.scatter(x, y)     # 산점도 — 두 변수 관계
ax.bar(labels, h)    # 막대 — 범주별 비교
ax.hist(data)        # 히스토그램 — 분포

화면 대신 파일로 저장

스크립트로 그래프를 만들 때는 화면에 띄우는 대신 파일로 저장하는 일이 많다. savefig를 쓰고, 해상도는 dpi로 조절한다.

fig.savefig("plot.png", dpi=150, bbox_inches="tight")

bbox_inches="tight"는 그래프 주변의 불필요한 여백을 잘라 준다. 보고서나 슬라이드에 넣을 그림을 만들 때 유용하다.

matplotlib의 첫 관문은 결국 “Figure는 도화지, Axes는 그래프”라는 구분과, subplots → plot → 꾸미기 → show/savefig라는 흐름이다. 이 골격만 익히면 나머지는 메서드 이름을 찾아 채워 넣는 일이다. 다음 글에서는 이런 탐색과 시각화를 셀 단위로 즉시 확인하게 해 주는 Jupyter Notebook을 다룬다.


지난 글: pandas merge: 표를 키로 이어 붙이기

다음 글: Jupyter Notebook: 셀 단위로 탐색하기


읽어주셔서 감사합니다. 😊