Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 부드러운 곡선 그리기 – SciPy B-스플라인 보간 완벽 가이드

데이터 시각화에서 기본적인 꺾은선 그래프는 데이터 포인트를 직선으로 연결하기 때문에 결과가 각져 보이거나 매끄럽지 않을 수 있습니다. 이럴 때 MatplotlibSciPy의 B-스플라인 보간(B-spline interpolation)을 함께 사용하면 데이터 포인트 사이를 자연스럽게 이어 주는 부드러운 곡선을 손쉽게 그릴 수 있습니다.

부드러운 선을 그리는 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
  • x, y 데이터 포인트 배열을 생성합니다.
  • plot() 메서드로 x와 y 데이터 포인트를 먼저 그립니다.
  • 부드러운 선을 위해 새로운 x 값(x_new)과 B-스플라인(bspline) 객체를 생성합니다.
  • B-스플라인에 x_new를 대입해 보간된 y_new 데이터 포인트를 계산합니다.
  • plot() 메서드로 x_new와 y_new 데이터 포인트를 그립니다.
  • show() 메서드로 최종 그림을 화면에 표시합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt
from scipy import interpolate

# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# x, y 데이터 포인트
x = np.array([1, 3, 4, 6, 7])
y = np.array([5, 1, 3, 2, 4])

# 원본 데이터 포인트 그리기
plt.plot(x, y)

# x_new, bspline, y_new 생성
x_new = np.linspace(1, 5, 50)
bspline = interpolate.make_interp_spline(x, y)
y_new = bspline(x_new)

# 보간된 새 데이터 포인트 그리기
plt.plot(x_new, y_new)

plt.show()

코드 설명

np.linspace(1, 5, 50)은 1부터 5 사이를 균등한 간격으로 나눈 50개의 새로운 x 값을 생성합니다. interpolate.make_interp_spline(x, y)는 주어진 데이터 포인트를 지나는 3차(cubic) B-스플라인을 만들어 주며, 이 스플라인 객체에 x_new를 대입하면 각 점을 부드럽게 통과하는 보간된 y_new 값을 얻을 수 있습니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Matplotlib에서 부드러운 곡선 그리기 – SciPy B-스플라인 보간 완벽 가이드

그래프에서 첫 번째 선은 원본 데이터 포인트를 직선으로 연결한 꺾은선 그래프이고, 두 번째 곡선은 B-스플라인 보간을 통해 만들어진 부드러운 선입니다. 이처럼 SciPy의 보간 기능을 활용하면 몇 줄의 코드만으로도 훨씬 자연스럽고 전문적인 시각화 결과를 얻을 수 있습니다.