Matplotlib - 2. 그래프 요소 다루기

2025. 1. 21. 11:49프로그래밍 (확장)/Python-Matplotlib

Matplotlib을 사용하면 그래프에 다양한 요소를 추가하여 더 명확하고 직관적으로 만들 수 있습니다. 이 섹션에서는 제목과 축 레이블, 범례, 스타일 변경, 축 조정 방법을 자세히 다룹니다.


2.1 제목과 축 레이블 추가

그래프 제목: plt.title()

그래프 제목은 그래프의 주요 내용을 간단히 설명합니다.

예시:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [10, 20, 25, 30]

plt.plot(x, y)
plt.title("Sales Over Time")  # 그래프 제목 추가
plt.show()

Tip: 수식을 제목으로 사용하려면 LaTeX 문법을 활용할 수 있습니다:

plt.title(r'$y = x^2$')  # 수식 추가

축 레이블: plt.xlabel() 및 plt.ylabel()

축에 레이블을 추가하면 각 축이 나타내는 데이터를 쉽게 이해할 수 있습니다.

예시:

plt.plot(x, y)
plt.xlabel("Time (Months)")  # x축 레이블 추가
plt.ylabel("Sales (Units)")  # y축 레이블 추가
plt.title("Sales Over Time")
plt.show()

2.2 범례 추가: plt.legend()

범례 생성

여러 데이터 시리즈가 포함된 그래프에서 각 데이터의 의미를 표시하려면 범례를 사용합니다.

예시:

plt.plot(x, y, label="Product A")
plt.plot(x, [15, 25, 30, 35], label="Product B")
plt.xlabel("Time (Months)")
plt.ylabel("Sales (Units)")
plt.title("Product Sales Over Time")
plt.legend()  # 범례 추가
plt.show()

범례 위치와 투명도 설정

loc 매개변수를 사용하여 범례의 위치를 설정할 수 있습니다. 또한, framealpha를 사용하여 범례의 투명도를 조절할 수 있습니다.

예시:

plt.legend(loc="upper left", framealpha=0.8)  # 왼쪽 위 위치와 투명도 설정

범례 위치 옵션:

  • loc='best': 자동으로 최적의 위치 선택
  • loc='upper left': 왼쪽 위
  • loc='upper right': 오른쪽 위
  • loc='lower left': 왼쪽 아래
  • loc='lower right': 오른쪽 아래

범례 세부 위치 조정

범례를 그래프 영역 밖으로 이동시키거나 세부적인 위치를 지정하려면 bbox_to_anchor를 사용할 수 있습니다.

예시:

plt.legend(bbox_to_anchor=(1.05, 1), 
           loc='upper left', 
           borderaxespad=0.)  # 그래프 밖으로 범례 위치시키기

2.3 스타일과 색상 변경

선 스타일: linestyle 및 linewidth

선 스타일과 두께를 설정하여 그래프의 가독성을 높일 수 있습니다.

예시:

plt.plot(x, y, linestyle="--", linewidth=2, label="Dashed Line")
plt.title("Line Style Example")
plt.legend()
plt.show()

주요 옵션:

  • linestyle: '-', '--', ':', '-.'
  • linewidth: 선의 두께를 설정 (기본값: 1)

색상 변경: color

색상을 지정하여 데이터를 구별할 수 있습니다. 색상 이름, 16진수, RGB 값을 사용할 수 있습니다. 사용 가능한 색상 목록은 아래와 같이 확인할 수 있습니다.

예시:

import matplotlib.colors as mcolors

# 사용 가능한 색상 목록
print(mcolors.TABLEAU_COLORS)  # TABLEAU 색상 목록
print(mcolors.CSS4_COLORS)     # CSS4 색상 목록

색상 지정 예시:

plt.plot(x, y, color='red', label='Red Line')
plt.title("Line Color Example")
plt.legend()
plt.show()

마커 추가: marker

데이터 포인트를 강조하기 위해 마커를 추가합니다.

예시:

plt.plot(x, y, marker='o', label="Data Points")
plt.title("Marker Example")
plt.legend()
plt.show()

마커 옵션:

  • 'o': 원
  • '^': 삼각형
  • 's': 정사각형
  • 'd': 다이아몬드

스타일 지정 통합

한 줄로 여러 스타일을 설정할 수 있습니다.

예시:

plt.plot(x, y, 'ro--', linewidth=2, label='Data')  # 빨간색, 점 마커, 파선
plt.title("Combined Style Example")
plt.legend()
plt.show()

2.4 축 조정

축 범위 설정: plt.xlim() 및 plt.ylim()

축의 범위를 설정하여 데이터가 잘 보이도록 조정할 수 있습니다.

예시:

plt.plot(x, y)
plt.xlim(0, 5)  # x축 범위 설정
plt.ylim(0, 40)  # y축 범위 설정
plt.title("Axis Range Example")
plt.show()

축 눈금 설정: plt.xticks() 및 plt.yticks()

눈금을 사용자 정의하거나 특정 값을 강조할 수 있습니다. 또한, 눈금을 회전하여 데이터를 더 잘 볼 수 있습니다.

예시:

plt.plot(x, y)
plt.xticks([1, 2, 3, 4], ["Jan", "Feb", "Mar", "Apr"], rotation=45)  # x축 눈금 회전
plt.yticks([10, 20, 30], ["Low", "Medium", "High"])  # 사용자 정의 y축 눈금
plt.title("Custom Ticks Example")
plt.show()

그리드 추가: plt.grid()

그리드를 추가하여 그래프를 더 명확히 할 수 있습니다. 스타일과 투명도도 설정 가능합니다.

예시:

plt.plot(x, y)
plt.grid(True, linestyle='--', alpha=0.7)  # 점선 그리드와 투명도 설정
plt.title("Grid Example")
plt.show()

 

Major/Minor 그리드 스타일 조정. 주 눈금과 보조 눈금에 대해 서로 다른 스타일을 지정할 수 있습니다.

예시:

plt.plot(x, y)
plt.grid(which="major", color="black", linestyle="--", linewidth=0.5)  # Major 그리드
plt.grid(which="minor", color="gray", linestyle=":", linewidth=0.3, alpha=0.7)  # Minor 그리드
plt.minorticks_on()  # 보조 눈금 활성화
plt.title("Major and Minor Grid Example")
plt.show()

 


2.5 추가 기능과 실용적인 데이터 예제

그래프 크기 설정: plt.figure()

그래프의 크기와 해상도를 설정합니다.

예시:

plt.figure(figsize=(10, 6), dpi=100)  # 그래프 크기와 DPI 설정
plt.plot(x, y)
plt.title("Figure Size Example")
plt.tight_layout()  # 그래프 간 여백 자동 조정
plt.show()

실제 데이터 시각화 예시

여러 데이터 시리즈를 한 그래프에 표시하고, 오차 범위를 포함한 시각화 예제입니다.

예시:

import numpy as np

# 예제 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)
error = 0.2

plt.figure(figsize=(10, 6))
plt.plot(x, y, label='Sine Wave')
plt.fill_between(x, y-error, y+error, alpha=0.2, label='Error Range')  # 오차 범위 시각화
plt.grid(True, linestyle='--', alpha=0.7)
plt.title("Sine Wave with Error Range")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.tight_layout()  # 여백 자동 조정
plt.show()

데이터 전처리 예시

이상치 제거와 결측치 처리를 통해 데이터를 정리한 후 시각화에 사용합니다.

예시:

from scipy import stats
import pandas as pd

# 예제 데이터 생성
data = pd.DataFrame({'value': [10, 12, 13, 100, 12, 11, 14, None]})

# 결측치 제거
cleaned_data = data.dropna()

# 이상치 제거 (Z-점수 기준)
z_scores = stats.zscore(cleaned_data['value'])
cleaned_data = cleaned_data[abs(z_scores) < 3]

print("Cleaned Data:")
print(cleaned_data)

한글 폰트 설정

Matplotlib에서 한글 텍스트를 사용하려면 폰트를 설정해야 합니다. 운영체제에 따라 기본 폰트를 설정하거나 폰트 파일 경로를 직접 지정할 수 있습니다.

폰트 확인 및 설정

폰트 확인 방법:

from matplotlib import font_manager
print([f.name for f in font_manager.fontManager.ttflist])  # 사용 가능한 폰트 목록

폰트 설정 방법:

from matplotlib import font_manager, rc

# 운영체제별 기본 폰트 설정
import platform
if platform.system() == 'Windows':
    rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
else:
    rc('font', family='NanumGothic')

# 그래프 예제
plt.plot(x, y)
plt.title("판매량 변화")
plt.xlabel("시간 (월)")
plt.ylabel("판매량 (단위)")
plt.tight_layout()  # 한글 표시 시 여백 자동 조정
plt.show()