📊 [파이썬 시각화 1탄] 데이터 분석의 꽃, Matplotlib 완벽 가이드!
데이터 분석을 열심히 해서 결과를 표(Table)로 뽑아냈는데, 막상 남들에게 보여주면 "그래서 이게 무슨 뜻이야?"라는 반응이 돌아온 적 있으신가요?
우리의 뇌는 숫자가 빽빽한 표보다 '시각화된 그림'을 훨씬 빠르고 정확하게 이해합니다. 오늘은 파이썬 데이터 시각화의 알파이자 오메가인 Matplotlib(맷플롯립)의 기초를 완벽하게 파헤쳐 보겠습니다!
🤔 1. 데이터를 왜 시각화해야 할까?
- 한눈에 파악: 사람이 감각기관을 통해 얻는 정보의 80%는 '시각'입니다. 수만 줄의 데이터도 차트 하나면 트렌드와 패턴을 즉시 파악할 수 있죠.
- 숨겨진 패턴 발견: 숫자(통계량)만으로는 절대 알 수 없는 진실을 보여줍니다.
💡 [보충] 앤스컴의 4분할 그래프 (Anscombe's Quartet)란? 강의 자료에 언급된 '앤스컴의 4분할 그래프'는 시각화가 왜 필수적인지 보여주는 가장 유명한 예시입니다. 4개의 데이터셋이 있는데, 이 4개는 평균, 분산, 상관계수 등 '수학적 통계 수치'가 완전히 똑같습니다. 하지만 막상 점을 찍어(Scatter) 시각화해 보면, 하나는 직선, 하나는 곡선, 하나는 이상치가 있는 형태 등 완전히 다른 데이터라는 것을 알게 됩니다. 즉, 숫자에만 의존하지 말고 꼭 "눈으로 그려봐야" 합니다!
🛠️ 2. 시각화의 기본 세팅 (feat. 한글 깨짐 해결법)
파이썬에는 seaborn, plotly 등 다양한 시각화 라이브러리가 있지만, 이 모든 것의 뿌리가 되는 기본기가 바로 matplotlib입니다.
① 라이브러리 설치 및 불러오기
# 터미널 창에 입력하여 설치합니다.
pip install matplotlib
# 파이썬 코드에서 관례적으로 'plt'라는 별명으로 불러옵니다.
import matplotlib.pyplot as plt
🚨 ② 한글 폰트 깨짐 해결하기 (매우 중요!)
Matplotlib의 유일한 단점은 기본 폰트가 한글을 지원하지 않는다는 것입니다. 그냥 한글로 제목을 달면 엑스박스(ㅁㅁㅁ)처럼 글자가 깨져버립니다. 코드 상단에 아래 두 줄을 무조건 복사+붙여넣기 하세요!
# 1. 폰트를 '맑은 고딕(Windows)' 또는 'AppleGothic(Mac)'으로 설정
plt.rcParams["font.family"] = "Malgun Gothic"
# 2. 마이너스(-) 기호가 깨지는 현상 방지
plt.rcParams['axes.unicode_minus'] = False
🖼️ 3. 그래프의 해부학 (용어를 알아야 그린다!)
그래프를 내 마음대로 조종하려면 각 부위의 명칭을 알아야 합니다. 도화지와 액자를 상상해 보세요!
- Figure (피겨): 그래프가 그려지는 '전체 도화지(가장 큰 바탕)'입니다.
- Axes (엑시즈 / Subplot): 도화지 안에 그려지는 '개별 그래프 영역(액자)'입니다. 하나의 Figure 안에 여러 개의 Axes(액자)를 넣을 수 있습니다.
- Axis (엑시스): 우리가 아는 X축, Y축 선 자체를 말합니다.
- Ticks (틱): 축 위에 있는 눈금표시(값)입니다.
- Title (타이틀): 그래프의 제목!
- Legend (범례): 파란 선은 A데이터, 빨간 선은 B데이터라고 알려주는 설명표입니다.
🎨 4. 그래프를 그리는 2가지 마법의 방식
Matplotlib은 그래프를 그리는 방식을 두 가지 제공합니다. 상황에 맞게 골라 쓰면 됩니다.
방법 1. 빠르고 간편한 pyplot 방식 (입문자용)
도화지(Figure)나 액자(Axes)를 굳이 만들지 않고, 파이썬이 알아서 현재 화면에 뚝딱 그려주는 방식입니다.
x = [1, 2, 3, 4]
y = [10, 20, 15, 30]
plt.plot(x, y) # 선 그래프 그리기
plt.title("초간단 그래프") # 제목 추가
plt.xlabel("X축 이름") # X축 라벨 추가
plt.show() # 화면에 출력! (가장 마지막에 필수)
방법 2. 섬세하고 전문적인 객체지향(OO) 방식 (실무용)
대시보드처럼 여러 개의 그래프를 한 화면에 정교하게 배치할 때 사용합니다. plt.subplots()를 이용해 도화지(fig)와 액자배열(axes)을 직접 만듭니다.
# 1행 2열짜리 도화지를 만들고 크기를 지정!
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
# 첫 번째(0번) 액자에 그리기
axes[0].plot(x, y, color='red')
axes[0].set_title("첫 번째 차트")
# 두 번째(1번) 액자에 점(Scatter) 그리기
axes[1].scatter(x, y, color='blue')
axes[1].set_title("두 번째 차트")
plt.show()
💡 주의: 객체지향 방식에서는 제목을 달 때 plt.title()이 아니라 axes[0].set_title()처럼 앞에 set_이 붙는다는 점을 꼭 기억하세요!
🖌️ 5. 내 맘대로 꾸미기 (색상과 스타일)
- 색상(Color) 지정:
- 알파벳 약자: r(빨강), b(파랑), g(초록), k(검정) 등
- 헥스코드(Hex): #FF0000 (원하는 색상의 코드를 구글에서 찾아서 사용 가능)
- 투명도: alpha=0.5 (0부터 1사이, 겹치는 그래프 그릴 때 유용)
- 테마(Style) 입히기: 코드를 예쁘게 꾸밀 자신이 없다면, 이미 완성된 '테마'를 한 줄로 입혀보세요.
- plt.style.use("seaborn-v0_8-muted") (그 외 다양한 스타일 이름은 plt.style.available로 확인 가능합니다)
📝 [실습 TODO] 내 손으로 직접 시각화해 보기!
주피터 노트북 빈 셀을 열고 아래 미션을 차근차근 수행해 보세요!
(준비물) 아래 데이터를 먼저 복사해서 실행하세요.
import matplotlib.pyplot as plt
# 실습용 데이터
months = ['1월', '2월', '3월', '4월', '5월']
sales_A = [120, 150, 130, 180, 200] # A팀 매출
sales_B = [100, 110, 140, 160, 190] # B팀 매출
- TODO 1: 한글 제목을 달았을 때 깨지지 않도록, 한글 폰트(Malgun Gothic 등)와 마이너스 깨짐 방지 설정을 적용하세요.
- TODO 2: 실무용 방식인 plt.subplots()를 사용하여, 1행 2열짜리 도화지(fig, axes)를 생성하세요. 도화지 크기(figsize)는 가로 12, 세로 5로 설정합니다.
- TODO 3: 왼쪽 그래프(axes[0])에는 months를 X축, sales_A를 Y축으로 하는 빨간색('red') 선 그래프(plot)를 그리고 범례 라벨(label)을 'A팀'으로 설정하세요.
- TODO 4: 오른쪽 그래프(axes[1])에는 동일하게 파란색 점 그래프(scatter)를 그려 sales_B를 표현하고, 라벨을 'B팀'으로 설정하세요. 투명도(alpha)는 0.5를 주세요.
- TODO 5: 각 그래프의 제목을 달고(set_title), 범례(legend())를 표시한 뒤, plt.show()를 통해 화면에 출력하세요.
💡 [정답 확인란]
직접 코딩을 마친 후 아래 코드를 드래그하여 확인해 보세요!
# [TODO 1] 한글 폰트 설정
plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False
# [TODO 2] 1행 2열 객체지향 레이아웃 생성
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
# [TODO 3] 왼쪽 그래프 (선 그래프)
axes[0].plot(months, sales_A, color='red', label='A팀')
axes[0].set_title("A팀 상반기 매출")
axes[0].set_xlabel("월")
axes[0].set_ylabel("매출액")
axes[0].legend() # 범례 표시
# [TODO 4, 5] 오른쪽 그래프 (점 그래프)
axes[1].scatter(months, sales_B, color='blue', alpha=0.5, label='B팀')
axes[1].set_title("B팀 상반기 매출")
axes[1].legend() # 범례 표시
# 전체 출력
plt.tight_layout() # 그래프 간격 예쁘게 자동 조정
plt.show()
'두두 IT > 파이썬' 카테고리의 다른 글
| [PYTHON 시각화] Pandas 내장 시각화 (0) | 2026.05.07 |
|---|---|
| [PYTHON 시각화] Matplotlib 주요그래프 (1) | 2026.05.07 |
| [PYTHON-Pandas 04-01]데이터프레임 합치기 (concat, join, merge) (0) | 2026.05.06 |
| [PYTHON-Pandas 03-02] 데이터를 정렬, 통계, 그룹 명령어 (0) | 2026.05.04 |
| [PYTHON-Pandas 03-01] 데이터 정렬부터 그룹화, 피벗 테이블 (0) | 2026.05.04 |