데이터 시각화에서 기본적인 꺾은선 그래프는 데이터 포인트를 직선으로 연결하기 때문에 결과가 각져 보이거나 매끄럽지 않을 수 있습니다. 이럴 때 Matplotlib와 SciPy의 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 값을 얻을 수 있습니다.
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

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