프로그래밍 (확장)/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()