Matplotlib 플롯 부드러운 곡선

Suraj Joshi 2023년1월30일
  1. scipy.interpolate.make_interp_spline()클래스를 사용하여 부드러운 곡선 플로팅
  2. scipy.ndimage.gaussian_filter1d()클래스를 사용하여 부드러운 곡선 플로팅
  3. scipy.interpolate.interp1d 클래스를 사용하여 부드러운 곡선 플로팅
Matplotlib 플롯 부드러운 곡선

이 튜토리얼에서는ScipyMatplotlib 패키지의 모듈을 사용하여 주어진 좌표에서 부드러운 곡선을 그리는 방법을 설명합니다.

matplotlib.pyplot.plot()함수는 기본적으로 데이터에서 인접한 두 점을 직선으로 결합하여 곡선을 생성하므로matplotlib.pyplot.plot()함수는 a에 대한 부드러운 곡선을 생성하지 않습니다. 적은 수의 데이터 포인트.

부드러운 곡선을 그리기 위해 먼저 스플라인 곡선을 곡선에 맞추고 곡선을 사용하여 극히 작은 간격으로 구분 된 x 값에 대한 y 값을 찾습니다. 마지막으로 매우 작은 간격으로 점을 플로팅하여 부드러운 곡선을 얻습니다.

scipy.interpolate.make_interp_spline()클래스를 사용하여 부드러운 곡선 플로팅

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

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

model = make_interp_spline(x, y)

xs = np.linspace(1, 7, 500)
ys = model(xs)

plt.plot(xs, ys)
plt.title("Smooth Spline Curve")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

출력:

make_interp_spline() 함수를 사용하여 부드러운 곡선 플로팅

먼저scipy.interpolate.make_interp_spline()을 사용하여 스플라인 곡선의 계수를 결정하여 부드러운 스플라인 곡선을 플로팅합니다. 주어진 데이터를 사용하여 스플라인 곡선의 계수를 추정 한 다음 계수를 사용하여 좁은 간격의 x 값에 대한 y 값을 결정하여 곡선을 매끄럽게 만듭니다. 곡선을 그리려면 X 축을 따라 1에서 7 사이의 간격이 동일한 500이 필요합니다.

기본적으로 스플라인 곡선의 각도는 3입니다.k매개 변수를 설정하여 스플라인 곡선의 각도를 변경할 수 있습니다.

주어진 점을 사용하여 곡선을 그리면 곡선을 다음과 같이 얻습니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

plt.plot(x, y)
plt.title("Curve plotted using the given points")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

출력:

주어진 점을 사용하여 플롯 된 곡선

scipy.ndimage.gaussian_filter1d()클래스를 사용하여 부드러운 곡선 플로팅

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter1d

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])
y_smoothed = gaussian_filter1d(y, sigma=5)

plt.plot(x, y_smoothed)
plt.title("Spline Curve Using the Gaussian Smoothing")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

출력:

gaussian_filter1d() 함수를 사용하여 부드러운 곡선 플로팅

함수가 부드럽 지 않다면gaussian_filter1d()를 사용하여Y-values를 부드럽게 만들 수 있습니다. scipy.ndimage.gaussian_filter1d()클래스는 부드러운 곡선을 생성하기 위해Y 값을 부드럽게하지만 원래의Y 값은 변경 될 수 있습니다.

sigma 매개 변수는 Gaussian 커널의 표준 편차를 나타내며sigma 값을 증가 시키면 더 부드러운 곡선을 얻습니다.

scipy.interpolate.interp1d 클래스를 사용하여 부드러운 곡선 플로팅

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

x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([100, 50, 25, 12.5, 6.25, 3.125, 1.5625])

cubic_interploation_model = interp1d(x, y, kind="cubic")
xs = np.linspace(1, 7, 500)
ys = cubic_interploation_model(xs)

plt.plot(xs, ys)
plt.title("Spline Curve Using Cubic Interpolation")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

출력:

3 차 보간을 사용하여 부드러운 곡선 플로팅

scipy.interpolate.interp1d클래스를 사용하여 3 차 보간 곡선을 생성 한 다음 곡선을 사용하여 부드러운 곡선을 위해 좁은 간격의 x 값에 대한 y 값을 결정합니다. 곡선을 그리려면 X 축을 따라 1과 7 사이에 동일한 간격으로 500 개의 점이 필요합니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn