본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 1. · 14 Views
Matplotlib 기초 그래프 그리기 완벽 가이드
파이썬으로 데이터를 시각화하는 Matplotlib의 기초를 다룹니다. 선 그래프, 막대 그래프, 산점도, 히스토그램까지 실무에서 가장 많이 사용하는 그래프 유형을 쉽고 재미있게 배워봅니다.
목차
1. Matplotlib 설치 및 import
어느 날 김개발 씨는 데이터 분석 프로젝트에 투입되었습니다. 엑셀로 그래프를 그리던 시절은 지났습니다.
이제 파이썬으로 수천 개의 데이터를 한 번에 시각화해야 하는 상황입니다. 선배가 "Matplotlib 써본 적 있어요?"라고 묻자, 김개발 씨는 고개를 저었습니다.
Matplotlib은 파이썬에서 가장 널리 사용되는 데이터 시각화 라이브러리입니다. 마치 화가에게 붓과 물감이 필요하듯, 데이터 분석가에게는 Matplotlib이 필요합니다.
이 라이브러리 하나만 익히면 선 그래프, 막대 그래프, 산점도 등 거의 모든 종류의 그래프를 그릴 수 있습니다.
다음 코드를 살펴봅시다.
# Matplotlib 설치 (터미널에서 실행)
# pip install matplotlib
# 라이브러리 import
import matplotlib.pyplot as plt
import numpy as np
# 간단한 테스트: 첫 그래프 그려보기
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 그래프 생성 및 출력
plt.plot(x, y)
plt.show()
김개발 씨는 입사 6개월 차 주니어 개발자입니다. 오늘 팀장님이 "이번 달 매출 데이터를 그래프로 정리해서 보고해 주세요"라고 요청했습니다.
엑셀을 열어볼까 하다가, 데이터가 무려 10만 건이라는 사실을 알게 되었습니다. 엑셀로는 도저히 감당이 안 되는 양입니다.
선배 개발자 박시니어 씨가 다가와 말했습니다. "그 정도 데이터는 파이썬으로 처리해야지.
Matplotlib이라는 라이브러리 들어봤어요?" 그렇다면 Matplotlib이란 정확히 무엇일까요? 쉽게 비유하자면, Matplotlib은 마치 디지털 스케치북과 같습니다.
화가가 스케치북에 연필로 밑그림을 그리고 색을 입히듯, 개발자는 Matplotlib으로 데이터를 그래프라는 그림으로 표현합니다. 다만 화가와 다른 점이 있다면, 우리는 수만 개의 점을 단 몇 줄의 코드로 한 번에 그릴 수 있다는 것입니다.
Matplotlib이 없던 시절에는 어땠을까요? 개발자들은 데이터를 시각화하기 위해 별도의 도구를 사용해야 했습니다.
파이썬으로 데이터를 처리한 뒤, 결과를 엑셀이나 다른 프로그램으로 옮겨서 그래프를 그렸습니다. 이 과정에서 시간도 많이 걸리고, 데이터를 옮기는 과정에서 실수가 생기기도 했습니다.
바로 이런 문제를 해결하기 위해 Matplotlib이 등장했습니다. Matplotlib을 사용하면 파이썬 코드 안에서 바로 그래프를 그릴 수 있습니다.
데이터 처리와 시각화를 한 곳에서 처리하니 작업 흐름이 훨씬 매끄러워집니다. 무엇보다 코드로 그래프를 그리기 때문에 재사용이 가능합니다.
같은 형식의 보고서를 매달 만들어야 한다면, 코드 한 번 작성해두고 계속 활용하면 됩니다. 위의 코드를 한 줄씩 살펴보겠습니다.
먼저 import matplotlib.pyplot as plt 부분을 봅시다. matplotlib.pyplot은 그래프를 그리는 핵심 모듈입니다.
이것을 매번 길게 쓰기 번거로우니 plt라는 짧은 별칭으로 부릅니다. 이 별칭은 전 세계 파이썬 개발자들이 관례처럼 사용하는 것이니 그대로 따르는 것이 좋습니다.
다음으로 import numpy as np 부분이 있습니다. numpy는 수치 계산을 위한 라이브러리입니다.
Matplotlib과 궁합이 잘 맞아서 함께 사용하는 경우가 많습니다. 물론 없어도 기본적인 그래프는 그릴 수 있지만, 조금만 복잡해져도 numpy의 도움이 필요해집니다.
실제 현업에서는 어떻게 활용할까요? 예를 들어 웹 서비스의 일별 방문자 수를 시각화한다고 가정해봅시다.
데이터베이스에서 방문자 데이터를 조회하고, 바로 Matplotlib으로 그래프를 그려서 보고서에 삽입할 수 있습니다. 이 모든 과정이 파이썬 스크립트 하나로 자동화됩니다.
하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 plt.show() 를 빼먹는 것입니다.
이 함수를 호출해야 그래프가 화면에 나타납니다. 또한 주피터 노트북에서는 %matplotlib inline 매직 명령어를 셀 상단에 추가해야 그래프가 노트북 안에 표시됩니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨는 터미널을 열고 pip install matplotlib을 입력했습니다.
설치가 완료되자, 드디어 데이터 시각화의 세계로 첫 발을 내딛게 되었습니다.
실전 팁
💡 - plt는 관례적인 별칭이므로 다른 이름으로 바꾸지 않는 것이 좋습니다
- 주피터 노트북에서는 %matplotlib inline을 먼저 실행하세요
- numpy도 함께 설치해두면 다양한 그래프를 더 쉽게 그릴 수 있습니다
2. 기본 선 그래프 (plot)
김개발 씨가 Matplotlib 설치를 마치고 첫 그래프를 그려보려 합니다. 팀장님이 요청한 것은 "이번 분기 매출 추이"를 보여주는 그래프입니다.
시간에 따른 변화를 보여주려면 어떤 그래프가 좋을까요? 박시니어 씨가 답합니다.
"그건 선 그래프가 제격이죠."
선 그래프는 데이터의 변화 추이를 보여주는 데 가장 적합한 그래프입니다. 마치 주식 차트처럼 시간의 흐름에 따른 값의 변화를 한눈에 파악할 수 있습니다.
Matplotlib에서는 plt.plot() 함수로 간단히 그릴 수 있습니다.
다음 코드를 살펴봅시다.
import matplotlib.pyplot as plt
# 월별 매출 데이터 (단위: 억원)
months = ['1월', '2월', '3월', '4월', '5월', '6월']
sales = [12, 15, 13, 18, 22, 25]
# 선 그래프 생성
plt.plot(months, sales, color='blue', marker='o', linestyle='-')
# 그래프 꾸미기
plt.title('2024년 상반기 매출 추이')
plt.xlabel('월')
plt.ylabel('매출 (억원)')
# 그래프 출력
plt.show()
김개발 씨는 이제 본격적으로 그래프를 그려볼 준비가 되었습니다. 첫 번째 미션은 상반기 매출 데이터를 시각화하는 것입니다.
데이터를 살펴보니 1월부터 6월까지의 월별 매출 수치가 정리되어 있습니다. 박시니어 씨가 조언합니다.
"시간에 따른 변화를 보여줄 때는 선 그래프만 한 게 없어요. 점들을 선으로 연결하면 추세가 한눈에 보이거든요." 그렇다면 선 그래프란 정확히 무엇일까요?
쉽게 비유하자면, 선 그래프는 마치 등산로 지도와 같습니다. 산을 오르내리는 경로가 선으로 표시되어 있으면 어디가 오르막이고 어디가 내리막인지 한눈에 알 수 있습니다.
마찬가지로 선 그래프는 데이터가 상승하는지 하락하는지를 직관적으로 보여줍니다. 선 그래프가 없다면 어떨까요?
숫자만 나열된 표를 보면서 "12, 15, 13, 18, 22, 25"라는 데이터의 추세를 파악하기는 쉽지 않습니다. 물론 숫자를 하나씩 비교하면 알 수 있지만, 데이터가 수십 개, 수백 개로 늘어나면 인간의 눈으로는 감당이 안 됩니다.
바로 이런 한계를 극복하기 위해 선 그래프를 사용합니다. plt.plot() 함수는 x축 데이터와 y축 데이터를 받아서 선 그래프를 그립니다.
첫 번째 인자가 x축, 두 번째 인자가 y축입니다. 그래프를 그리면 매출이 꾸준히 상승하고 있다는 사실이 단번에 드러납니다.
위의 코드를 조금 더 자세히 살펴보겠습니다. color='blue' 는 선의 색상을 파란색으로 지정합니다.
'red', 'green', 'orange' 등 다양한 색상을 사용할 수 있습니다. marker='o' 는 각 데이터 포인트에 동그라미 표시를 추가합니다.
's'는 사각형, '^'는 삼각형을 의미합니다. linestyle='-' 는 실선을 의미하며, '--'는 점선, ':'는 점점선입니다.
실제 현업에서는 어떻게 활용할까요? 주식 시세 변동, 웹사이트 일별 트래픽, 기온 변화 등 시간에 따른 연속적인 데이터를 보여줄 때 선 그래프가 빛을 발합니다.
특히 여러 데이터를 비교할 때 같은 그래프에 여러 선을 그리면 차이점이 명확하게 드러납니다. 하지만 주의할 점도 있습니다.
선 그래프는 연속적인 데이터에 적합합니다. 만약 "서울, 부산, 대구의 인구수"처럼 서로 연결되지 않는 개별 항목을 비교한다면 선 그래프는 적절하지 않습니다.
이런 경우에는 막대 그래프가 더 적합합니다. 다시 김개발 씨의 이야기로 돌아가 봅시다.
코드를 실행하자 화면에 깔끔한 선 그래프가 나타났습니다. 팀장님이 한눈에 "오, 매출이 꾸준히 오르고 있네요!"라고 말했습니다.
데이터 시각화의 힘을 체감하는 순간이었습니다.
실전 팁
💡 - marker='o'를 추가하면 각 데이터 포인트가 더 잘 보입니다
- 여러 선을 비교할 때는 color를 다르게 지정하세요
- linewidth 옵션으로 선의 두께를 조절할 수 있습니다
3. 막대 그래프 (bar)
다음 날, 김개발 씨에게 새로운 요청이 들어왔습니다. "이번에는 부서별 실적을 비교해서 보여주세요." 이번에는 시간 흐름이 아니라 부서 간 비교입니다.
선 그래프로 그리려다가 뭔가 이상하다는 느낌이 들었습니다. 박시니어 씨가 웃으며 말합니다.
"이럴 때는 막대 그래프를 쓰는 거예요."
막대 그래프는 서로 다른 항목 간의 크기를 비교할 때 사용합니다. 마치 키 재기를 하듯, 각 항목의 값을 막대 높이로 표현해서 어느 것이 더 큰지 한눈에 비교할 수 있습니다.
Matplotlib에서는 plt.bar() 함수로 그립니다.
다음 코드를 살펴봅시다.
import matplotlib.pyplot as plt
# 부서별 실적 데이터
departments = ['영업팀', '개발팀', '마케팅팀', '인사팀', '재무팀']
performance = [85, 92, 78, 65, 88]
# 막대 그래프 생성
plt.bar(departments, performance, color='skyblue', edgecolor='navy')
# 그래프 꾸미기
plt.title('부서별 분기 실적')
plt.xlabel('부서')
plt.ylabel('실적 점수')
# y축 범위 설정
plt.ylim(0, 100)
# 그래프 출력
plt.show()
김개발 씨는 어제 배운 선 그래프로 부서별 실적을 그려보았습니다. 그런데 결과물이 영 이상합니다.
영업팀과 개발팀을 선으로 연결한다니, 마치 영업팀이 개발팀으로 변해가는 것처럼 보입니다. 박시니어 씨가 설명합니다.
"선 그래프는 연속적인 데이터에 쓰는 거예요. 부서는 서로 연결된 게 아니잖아요.
이럴 때는 막대 그래프가 맞아요." 그렇다면 막대 그래프란 정확히 무엇일까요? 쉽게 비유하자면, 막대 그래프는 마치 육상 시상대와 같습니다.
1등, 2등, 3등 선수가 높이가 다른 단상에 올라서면 누가 더 높은 순위인지 한눈에 알 수 있습니다. 막대 그래프도 각 항목을 막대로 세워서 높이로 크기를 비교합니다.
막대 그래프와 선 그래프의 차이는 무엇일까요? 선 그래프는 데이터 포인트를 선으로 연결합니다.
이는 데이터 간에 연속성이 있다는 것을 암시합니다. 반면 막대 그래프의 각 막대는 독립적으로 서 있습니다.
부서, 제품, 국가처럼 서로 연결되지 않은 항목을 비교할 때 막대 그래프가 적합한 이유입니다. 위의 코드를 살펴보겠습니다.
plt.bar() 함수는 plt.plot()과 비슷하게 x축과 y축 데이터를 받습니다. color='skyblue' 로 막대 내부 색상을, edgecolor='navy' 로 막대 테두리 색상을 지정했습니다.
이렇게 하면 막대가 더 선명하게 보입니다. plt.ylim(0, 100) 은 y축의 범위를 0부터 100으로 고정합니다.
실적 점수가 100점 만점이라면 이렇게 범위를 고정해두면 각 부서의 실적이 전체 중 어느 정도인지 파악하기 쉽습니다. 실제 현업에서는 어떻게 활용할까요?
제품별 판매량 비교, 지역별 매출 비교, 연도별 실적 비교 등 개별 항목의 크기를 비교해야 하는 거의 모든 상황에서 막대 그래프가 사용됩니다. 발표 자료나 보고서에서 가장 흔히 볼 수 있는 그래프 유형이기도 합니다.
하지만 주의할 점도 있습니다. 막대가 너무 많으면 그래프가 복잡해져서 오히려 읽기 어려워집니다.
일반적으로 10개 이하의 항목을 비교할 때 막대 그래프가 효과적입니다. 항목이 많다면 상위 10개만 선별하거나 다른 시각화 방법을 고려해야 합니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. 막대 그래프로 다시 그려보니 부서별 실적 차이가 명확하게 드러났습니다.
개발팀이 가장 높고, 인사팀이 가장 낮다는 것이 한눈에 들어옵니다. "이게 바로 올바른 시각화구나!"라고 김개발 씨는 깨달았습니다.
실전 팁
💡 - 수평 막대 그래프가 필요하면 plt.barh()를 사용하세요
- width 옵션으로 막대 너비를 조절할 수 있습니다
- 항목 이름이 길면 수평 막대 그래프가 더 읽기 쉽습니다
4. 산점도 (scatter)
김개발 씨는 이제 선 그래프와 막대 그래프를 자유자재로 그릴 수 있게 되었습니다. 그러던 어느 날, 데이터 분석팀에서 이상한 요청이 들어왔습니다.
"광고비와 매출 사이에 상관관계가 있는지 확인해 주세요." 박시니어 씨가 말합니다. "두 변수 사이의 관계를 볼 때는 산점도가 제격이에요."
산점도는 두 변수 사이의 관계를 점으로 표현하는 그래프입니다. 마치 밤하늘의 별자리처럼 점들이 흩어져 있는 모양을 보고 패턴을 발견합니다.
점들이 우상향으로 모여 있으면 양의 상관관계, 우하향이면 음의 상관관계를 의미합니다.
다음 코드를 살펴봅시다.
import matplotlib.pyplot as plt
# 광고비와 매출 데이터
ad_cost = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
revenue = [15, 28, 35, 48, 52, 68, 75, 82, 95, 105]
# 산점도 생성
plt.scatter(ad_cost, revenue, color='coral', s=100, alpha=0.7)
# 그래프 꾸미기
plt.title('광고비 vs 매출 상관관계')
plt.xlabel('광고비 (만원)')
plt.ylabel('매출 (만원)')
# 그리드 추가
plt.grid(True, linestyle='--', alpha=0.5)
# 그래프 출력
plt.show()
김개발 씨는 새로운 도전에 직면했습니다. 지금까지는 하나의 변수를 시각화했지만, 이번에는 두 변수 사이의 관계를 파악해야 합니다.
광고비를 많이 쓰면 정말 매출이 오를까요? 이 질문에 답하려면 어떤 그래프를 그려야 할까요?
박시니어 씨가 힌트를 줍니다. "두 숫자 사이의 관계를 볼 때는 산점도를 그려보세요.
점들의 분포를 보면 관계가 보여요." 그렇다면 산점도란 정확히 무엇일까요? 쉽게 비유하자면, 산점도는 마치 반 아이들의 키와 몸무게를 표시한 그래프와 같습니다.
x축에 키를, y축에 몸무게를 놓고 각 학생을 점으로 찍습니다. 키가 큰 학생일수록 몸무게도 많이 나가는 경향이 있다면, 점들이 우상향 방향으로 모여 있을 것입니다.
산점도가 없다면 어떨까요? 광고비 데이터와 매출 데이터를 각각 따로 보면 둘 사이의 관계를 파악하기 어렵습니다.
광고비가 10만원일 때 매출이 15만원, 광고비가 20만원일 때 매출이 28만원... 숫자만 나열해서는 패턴을 발견하기 힘듭니다.
바로 이런 문제를 해결하기 위해 산점도를 사용합니다. plt.scatter() 함수로 산점도를 그립니다.
위 코드에서 s=100 은 점의 크기를 지정합니다. 숫자가 클수록 점이 커집니다.
alpha=0.7 은 점의 투명도입니다. 점이 많이 겹치는 경우 투명도를 조절하면 밀집도를 파악하기 쉽습니다.
코드 결과를 살펴보면 점들이 좌하단에서 우상단으로 올라가는 패턴을 보입니다. 이것이 바로 양의 상관관계입니다.
광고비가 증가할수록 매출도 함께 증가하는 경향이 있다는 뜻입니다. 실제 현업에서는 어떻게 활용할까요?
머신러닝에서 데이터를 탐색할 때 산점도는 필수입니다. 두 변수 사이의 관계를 파악하면 어떤 변수가 예측에 유용할지 판단할 수 있습니다.
또한 이상치 탐지에도 산점도가 유용합니다. 다른 점들과 동떨어진 점이 있다면 데이터 오류일 가능성이 있습니다.
하지만 주의할 점도 있습니다. 상관관계가 인과관계를 의미하지는 않습니다.
광고비와 매출이 함께 올라간다고 해서 반드시 광고비가 매출을 올린다고 단정지을 수는 없습니다. 둘 다 계절 요인에 영향을 받았을 수도 있습니다.
산점도는 관계의 존재를 보여줄 뿐, 원인과 결과를 증명하지는 않습니다. 다시 김개발 씨의 이야기로 돌아가 봅시다.
산점도를 그려서 데이터 분석팀에 보여주자, 분석가가 만족스러운 표정을 지었습니다. "이 그래프를 보니 광고비와 매출 사이에 양의 상관관계가 있네요.
추가 분석 자료로 쓰기 좋겠어요."
실전 팁
💡 - s 옵션으로 점 크기, alpha 옵션으로 투명도를 조절하세요
- c 옵션에 리스트를 넣으면 점마다 다른 색상을 적용할 수 있습니다
- cmap 옵션으로 색상 맵을 지정해서 연속적인 색상 변화를 표현할 수 있습니다
5. 히스토그램 (hist)
김개발 씨의 다음 과제는 사용자 분석입니다. "우리 서비스 사용자들의 나이 분포가 어떻게 되는지 알고 싶어요." 사용자가 수만 명인데, 이들의 나이를 어떻게 한눈에 보여줄 수 있을까요?
박시니어 씨가 말합니다. "나이대별로 몇 명인지 세서 히스토그램으로 그리면 돼요."
히스토그램은 데이터의 분포를 보여주는 그래프입니다. 데이터를 구간별로 나누고, 각 구간에 속하는 데이터의 개수를 막대로 표현합니다.
마치 학교에서 시험 점수대별 학생 수를 세는 것과 같습니다. 데이터가 어디에 집중되어 있는지, 얼마나 퍼져 있는지를 파악할 수 있습니다.
다음 코드를 살펴봅시다.
import matplotlib.pyplot as plt
import numpy as np
# 사용자 나이 데이터 (1000명)
np.random.seed(42)
ages = np.random.normal(loc=35, scale=10, size=1000)
ages = ages[(ages >= 10) & (ages <= 70)] # 10세~70세로 제한
# 히스토그램 생성
plt.hist(ages, bins=12, color='mediumseagreen', edgecolor='white')
# 그래프 꾸미기
plt.title('서비스 사용자 나이 분포')
plt.xlabel('나이')
plt.ylabel('사용자 수')
# 그래프 출력
plt.show()
김개발 씨는 1000명의 사용자 나이 데이터를 받았습니다. 21세, 35세, 42세, 28세...
숫자가 끝없이 나열되어 있습니다. 이 데이터를 보고 "우리 사용자층은 어떤 연령대가 많은가요?"라는 질문에 답해야 합니다.
박시니어 씨가 설명합니다. "이런 경우에는 히스토그램을 그려요.
나이를 10대, 20대, 30대 이런 식으로 구간을 나누고, 각 구간에 몇 명이 있는지 세는 거예요." 그렇다면 히스토그램이란 정확히 무엇일까요? 쉽게 비유하자면, 히스토그램은 마치 사과를 크기별로 분류하는 것과 같습니다.
과일 가게에서 사과를 소, 중, 대로 나누고 각 바구니에 몇 개씩 담겼는지 세면 어떤 크기의 사과가 가장 많은지 알 수 있습니다. 히스토그램도 데이터를 구간별로 나누고 개수를 셉니다.
히스토그램과 막대 그래프는 어떻게 다를까요? 얼핏 보면 비슷해 보이지만 중요한 차이가 있습니다.
막대 그래프의 각 막대는 독립적인 항목입니다. 반면 히스토그램의 막대들은 연속된 구간을 나타냅니다.
그래서 히스토그램의 막대들은 서로 붙어 있고, 막대 그래프의 막대들은 떨어져 있습니다. 위의 코드를 살펴보겠습니다.
bins=12 는 데이터를 12개의 구간으로 나눈다는 뜻입니다. 나이가 10세부터 70세까지라면 대략 5세 간격으로 나뉘게 됩니다.
bins 값을 늘리면 구간이 더 촘촘해지고, 줄이면 더 넓어집니다. edgecolor='white' 는 각 막대 사이에 흰색 테두리를 추가합니다.
이렇게 하면 막대들이 서로 붙어 있어도 구분이 잘 됩니다. 히스토그램의 막대는 연속된 데이터를 나타내므로 붙어 있는 것이 맞지만, 시각적 구분을 위해 테두리를 추가하는 것입니다.
실제 현업에서는 어떻게 활용할까요? 데이터 분석의 첫 단계에서 히스토그램은 필수입니다.
데이터가 정규분포를 따르는지, 한쪽으로 치우쳐 있는지, 이상치가 있는지를 파악할 수 있습니다. 예를 들어 상품 가격 분포, 응답 시간 분포, 사용자 접속 시간 분포 등을 분석할 때 히스토그램을 먼저 그려봅니다.
하지만 주의할 점도 있습니다. bins 값에 따라 그래프 모양이 크게 달라집니다.
bins가 너무 적으면 데이터의 세부적인 패턴이 숨겨지고, 너무 많으면 노이즈가 부각됩니다. 적절한 bins 값을 찾기 위해 여러 값을 시도해 보는 것이 좋습니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. 히스토그램을 그려보니 30대 중반 사용자가 가장 많고, 양쪽으로 갈수록 줄어드는 종 모양의 분포가 나타났습니다.
"우리 서비스의 핵심 사용자층은 30대네요!"라고 기획팀에 보고할 수 있게 되었습니다.
실전 팁
💡 - bins 값을 여러 개로 시도해서 가장 적절한 값을 찾으세요
- density=True 옵션을 추가하면 빈도 대신 밀도로 표시됩니다
- 여러 데이터셋을 비교하려면 alpha를 조절해서 겹쳐 그리세요
6. 그래프 제목, 라벨, 범례 설정
김개발 씨가 보고서에 넣을 그래프를 완성했습니다. 그런데 팀장님이 그래프를 보더니 고개를 갸웃합니다.
"이게 무슨 그래프예요? x축이 뭐고 y축이 뭔지 모르겠는데요." 박시니어 씨가 말합니다.
"그래프에 제목이랑 라벨을 달아야죠. 그래프는 혼자 보는 게 아니라 다른 사람에게 보여주는 거니까요."
그래프의 제목, 축 라벨, 범례는 그래프를 이해하기 쉽게 만드는 필수 요소입니다. 마치 책에 제목과 목차가 있어야 내용을 파악하기 쉬운 것처럼, 그래프에도 설명이 필요합니다.
Matplotlib에서는 title(), xlabel(), ylabel(), legend() 함수로 이를 설정합니다.
다음 코드를 살펴봅시다.
import matplotlib.pyplot as plt
# 데이터
months = ['1분기', '2분기', '3분기', '4분기']
product_a = [120, 150, 180, 200]
product_b = [100, 130, 160, 190]
# 여러 선 그래프 그리기
plt.plot(months, product_a, 'b-o', label='제품 A')
plt.plot(months, product_b, 'r--s', label='제품 B')
# 제목 설정
plt.title('2024년 분기별 제품 매출 비교', fontsize=14, fontweight='bold')
# 축 라벨 설정
plt.xlabel('분기', fontsize=12)
plt.ylabel('매출 (억원)', fontsize=12)
# 범례 설정
plt.legend(loc='upper left')
# 그래프 출력
plt.show()
김개발 씨는 열심히 그래프를 그렸지만 큰 실수를 했습니다. 그래프만 덩그러니 있고 아무런 설명이 없었던 것입니다.
다른 사람이 보면 이 그래프가 무엇을 의미하는지 알 수 없습니다. 박시니어 씨가 차분히 설명합니다.
"그래프는 데이터를 전달하는 도구예요. 보는 사람이 5초 안에 '아, 이게 이런 내용이구나'라고 파악할 수 있어야 좋은 그래프입니다." 그렇다면 그래프에 어떤 정보를 추가해야 할까요?
첫째는 제목입니다. 제목은 그래프 상단에 위치하며 "이 그래프가 무엇을 보여주는가"를 한 문장으로 설명합니다.
plt.title() 함수로 설정합니다. 둘째는 축 라벨입니다.
x축과 y축이 각각 무엇을 나타내는지 표시합니다. 단위까지 명시하면 더욱 명확해집니다.
plt.xlabel() 과 plt.ylabel() 함수를 사용합니다. 셋째는 범례입니다.
그래프에 여러 데이터가 있을 때 각각이 무엇인지 구분해줍니다. 위 코드에서 파란 선은 제품 A, 빨간 선은 제품 B를 나타내는데, 범례가 없으면 이를 알 수 없습니다.
위의 코드를 자세히 살펴보겠습니다. 'b-o' 와 'r--s' 는 축약형 표기입니다.
'b'는 blue, '-'는 실선, 'o'는 원형 마커입니다. 'r'은 red, '--'는 점선, 's'는 사각형 마커입니다.
이렇게 한 줄에 색상, 선 스타일, 마커를 모두 지정할 수 있습니다. label='제품 A' 는 이 선에 이름을 붙이는 것입니다.
나중에 plt.legend() 를 호출하면 label로 지정한 이름들이 범례에 표시됩니다. loc='upper left' 는 범례를 왼쪽 위에 배치하라는 뜻입니다.
fontsize 와 fontweight 옵션으로 글자 크기와 굵기를 조절할 수 있습니다. 발표 자료에 넣을 그래프라면 글자를 좀 더 크게 설정하는 것이 좋습니다.
실제 현업에서는 어떻게 활용할까요? 보고서, 발표 자료, 논문 등 공식적인 문서에 들어가는 그래프에는 반드시 제목과 라벨이 있어야 합니다.
특히 여러 사람이 보는 자료에서는 그래프만 보고도 내용을 이해할 수 있어야 합니다. "이게 뭔지 설명 좀 해주세요"라는 질문이 나오면 안 됩니다.
하지만 주의할 점도 있습니다. 제목과 라벨이 너무 길면 오히려 가독성이 떨어집니다.
핵심 정보만 간결하게 담아야 합니다. 또한 범례가 그래프 영역을 가리지 않도록 위치를 적절히 조절해야 합니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. 제목, 라벨, 범례를 추가한 그래프를 다시 보여주자, 팀장님이 만족스러운 표정을 지었습니다.
"이제야 한눈에 들어오네요. 제품 A가 제품 B보다 전반적으로 매출이 높군요." 데이터 시각화의 완성은 결국 "소통"이라는 것을 김개발 씨는 깨달았습니다.
실전 팁
💡 - 범례 위치는 loc 옵션으로 'best', 'upper right', 'lower left' 등으로 지정합니다
- plt.tight_layout()을 추가하면 라벨이 잘리지 않게 여백을 자동 조절합니다
- 한글 폰트가 깨지면 plt.rcParams['font.family'] = 'Malgun Gothic' 등으로 설정하세요
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.