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

Matplotlib에서 최소한의 스무딩으로 선(다각형 사슬) 그래프 그리기

데이터 시각화를 하다 보면 데이터 포인트 사이를 부드럽게 연결하면서도 원본 데이터의 형태는 최대한 유지하고 싶을 때가 있습니다. Matplotlib에서 최소한의 스무딩으로 선(다각형 사슬, 폴리라인)을 그리려면 SciPy의 pchip() 메서드를 활용하는 것이 효과적입니다.

PCHIP(Piecewise Cubic Hermite Interpolating Polynomial)은 구간별 3차 에르미트 보간 기법으로, 데이터의 단조성(monotonicity)을 보존하기 때문에 원본 데이터에 없는 불필요한 진동이나 오버슈팅 없이 자연스러운 곡선을 만들어 줍니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • 데이터 포인트 개수를 나타내는 변수 N을 초기화합니다.
  • NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
  • SciPy의 pchip() 메서드로 1차원 단조 3차 보간 객체를 생성합니다.
  • 보간된 값 (x, interp(x))과 원본 데이터 (x, y)를 함께 플롯합니다.
  • show() 메서드로 그림을 화면에 표시합니다.

예제 코드

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

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

N = 50
x = np.linspace(-10, 10, N)
y = np.sin(x)
interp = pchip(x, y)

plt.plot(x, interp(x), color='red')
plt.plot(x, y, 'bo')

plt.show()

코드 설명

위 코드에서는 -10부터 10까지 50개의 균등한 간격으로 x 값을 생성하고, y 값은 사인 함수로 계산했습니다. pchip(x, y)는 이 데이터를 기반으로 보간 객체를 반환하며, 이 객체를 함수처럼 호출하면(interp(x)) 스무딩된 y 값을 얻을 수 있습니다.

결과를 보면 빨간색 곡선이 파란색 데이터 포인트들을 부드럽게 통과하면서도, 사인 곡선의 원래 형태가 왜곡되지 않고 잘 유지되는 것을 확인할 수 있습니다. 일반적인 스플라인 보간과 달리 PCHIP는 데이터 포인트 사이에서 값이 과도하게 튀지 않아 실측 데이터나 노이즈가 있는 데이터를 시각화할 때 특히 유용합니다.