프로그래밍 (확장)/Python-Matplotlib

Matplotlib - 3. 다양한 그래프 유형

개발_노트 2025. 1. 21. 12:10

Matplotlib은 다양한 그래프 유형을 제공하여 데이터를 효과적으로 시각화할 수 있습니다. 이 섹션에서는 주요 그래프 유형과 그 사용법, 장단점, 그리고 적합한 사용 시나리오를 설명합니다.


3.1 선 그래프

개요

선 그래프는 시간에 따른 데이터 변화를 시각화하거나 연속적인 데이터를 비교하는 데 사용됩니다.

사용 시나리오

  • 매출 성장 추세
  • 기온 변화
  • 주식 가격 변동

장단점

장점:

  • 연속 데이터를 직관적으로 표현 가능.
  • 여러 데이터 시리즈를 한 그래프에서 비교 가능.

단점:

  • 데이터 시리즈가 많을 경우 혼란을 초래할 수 있음.

예제: 여러 데이터 시리즈와 선 스타일 지정

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [10, 20, 30, 40, 50]
y2 = [15, 25, 35, 45, 55]

plt.plot(x, y1, label="Dataset 1", linestyle="-", color="blue")
plt.plot(x, y2, label="Dataset 2", linestyle="--", color="red")
plt.title("Line Graph Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.legend()
plt.grid(True, linestyle="--", alpha=0.7)
plt.show()

3.2 막대 그래프

개요

막대 그래프는 범주형 데이터를 비교하거나 그룹화 및 누적 데이터를 시각화할 때 유용합니다.

사용 시나리오

  • 제품별 매출 비교
  • 연도별 성장률 비교
  • 그룹별 성과 비교

장단점

장점:

  • 범주형 데이터 비교에 효과적.
  • 그룹화 및 누적 표현 가능.

단점:

  • 범주가 많을 경우 가독성이 떨어질 수 있음.

예제: 수직 및 수평 막대 그래프

categories = ["A", "B", "C", "D"]
values = [10, 20, 30, 40]

# 수직 막대 그래프
plt.bar(categories, values, color="skyblue")
plt.title("Vertical Bar Graph")
plt.xlabel("Categories")
plt.ylabel("Values")
plt.show()

# 수평 막대 그래프
plt.barh(categories, values, color="lightgreen")
plt.title("Horizontal Bar Graph")
plt.xlabel("Values")
plt.ylabel("Categories")
plt.show()

예제: 그룹화 및 누적 막대 그래프

import numpy as np

categories = ["A", "B", "C"]
values1 = [5, 10, 15]
values2 = [3, 7, 12]
x = np.arange(len(categories))

# 그룹화 막대 그래프
plt.bar(x - 0.2, values1, width=0.4, label="Group 1", color="blue")
plt.bar(x + 0.2, values2, width=0.4, label="Group 2", color="orange")
plt.xticks(x, categories)
plt.title("Grouped Bar Graph")
plt.legend()
plt.show()

# 누적 막대 그래프
plt.bar(categories, values1, label="Group 1", color="blue")
plt.bar(categories, values2, bottom=values1, label="Group 2", color="orange")
plt.title("Stacked Bar Graph")
plt.legend()
plt.show()

3.3 히스토그램

개요

히스토그램은 데이터의 분포를 시각화하는 데 사용되며, 데이터를 특정 범위(bin)로 나누어 빈도를 표시합니다.

사용 시나리오

  • 시험 점수 분포
  • 센서 데이터 분포
  • 데이터 이상치 확인

장단점

장점:

  • 데이터 분포를 한눈에 확인 가능.
  • 빈(bin) 크기를 조정하여 세부 분석 가능.

단점:

  • 적절한 bin 크기를 설정하지 않으면 해석이 어려울 수 있음.

예제: 빈 크기 조정

import numpy as np

# 데이터 생성
data = np.random.normal(50, 10, 1000)  # 평균 50, 표준편차 10

plt.hist(data, bins=20, color="purple", alpha=0.7, edgecolor="black")
plt.title("Histogram Example")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.grid(True, linestyle="--", alpha=0.7)
plt.show()

3.4 산점도

개요

산점도는 데이터 포인트 간의 분포와 관계를 시각화하는 데 사용됩니다.

사용 시나리오

  • 변수 간 상관관계 확인
  • 데이터 클러스터링 분석
  • 이상치 탐지

장단점

장점:

  • 변수 간의 관계를 쉽게 파악 가능.
  • 크기와 색상을 추가하여 데이터를 더 풍부하게 표현 가능.

단점:

  • 데이터가 과밀하면 해석이 어려움.

예제: 색상과 크기를 활용한 산점도

x = np.random.rand(50)
y = np.random.rand(50)
sizes = np.random.rand(50) * 1000
colors = np.random.rand(50)

plt.scatter(x, y, s=sizes, c=colors, cmap="viridis", alpha=0.8, edgecolor="black")
plt.title("Enhanced Scatter Plot")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.colorbar(label="Color Scale")
plt.show()

3.5 파이 차트

개요

파이 차트는 데이터의 비율을 시각화하는 데 사용됩니다.

사용 시나리오

  • 시장 점유율 분석
  • 설문 조사 결과
  • 자원 분배 비율

장단점

장점:

  • 데이터 비율을 직관적으로 표현 가능.

단점:

  • 데이터 항목이 많을 경우 혼란을 초래할 수 있음.

예제: 비율 강조 및 레이블 추가

sizes = [25, 35, 30, 10]
labels = ["Product A", "Product B", "Product C", "Product D"]
explode = (0, 0.1, 0, 0)  # Product B 강조

plt.pie(sizes, labels=labels, explode=explode, autopct="%1.1f%%", startangle=90, colors=["gold", "lightblue", "lightgreen", "pink"])
plt.title("Market Share")
plt.show()

3.6 박스 플롯

개요

박스 플롯은 데이터의 분포와 이상치를 시각화하는 데 사용됩니다.

사용 시나리오

  • 데이터 이상치 확인
  • 분포 비교
  • 데이터 범위 및 중앙값 파악

장단점

장점:

  • 이상치와 분포를 효과적으로 표현 가능.

단점:

  • 데이터 분포를 자세히 표현하기에는 부족할 수 있음.

예제: 데이터 분포와 이상치 표시

data = [7, 8, 5, 6, 9, 10, 4, 5, 6, 7, 8, 6, 7, 9]

plt.boxplot(data, patch_artist=True, boxprops=dict(facecolor="lightblue", color="blue"))
plt.title("Box Plot Example")
plt.ylabel("Values")
plt.show()

3.7 히트맵

개요

히트맵은 2D 데이터를 색상으로 시각화하여 데이터를 직관적으로 표현합니다.

사용 시나리오

  • 상관관계 분석
  • 매트릭스 데이터 시각화
  • 분포 패턴 탐색

예제: 2D 데이터 시각화

import numpy as np

data = np.random.rand(6, 6)

plt.imshow(data, cmap="coolwarm", interpolation="nearest")
plt.colorbar(label="Scale")
plt.title("Heatmap Example")
plt.show()

3.8 등고선 그래프

개요

등고선 그래프는 3D 데이터를 2D로 표현하여 높낮이를 나타냅니다.

사용 시나리오

  • 지형 데이터 시각화
  • 함수의 변화 시각화

예제: 등고선과 채워진 등고선

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

plt.contour(x, y, z, levels=10, cmap="viridis")
plt.colorbar(label="Height")
plt.title("Contour Plot Example")
plt.show()

plt.contourf(x, y, z, levels=10, cmap="viridis")
plt.colorbar(label="Height")
plt.title("Filled Contour Plot Example")
plt.show()

3.9 극좌표 그래프

개요

극좌표 그래프는 원형 데이터를 시각화하는 데 사용됩니다.

사용 시나리오

  • 주기적인 데이터 분석
  • 원형 패턴 시각화

예제: 원형 데이터 시각화

angles = np.linspace(0, 2 * np.pi, 100)
radii = 1 + np.sin(angles)

plt.polar(angles, radii, color="purple")
plt.title("Polar Plot Example")
plt.show()