Skip to content Skip to sidebar Skip to footer

Smoothing A Curve With Vectors Made By Few Elements?

I have 4 curves that are represented by these vectors: x = [300, 700, 1000, 1500] y1 = [-1.0055394199673442, -0.11221578805214968, -1.502661406039569, 1.0216939169819494] y2 = [-1.

Solution 1:

Alright, so what I'm proposing here is cheating and inventing data, but at least it makes the curves look a little more like you (or your supervisor) want.

x =  [300,      700,      1000,       1500] # your original xx2 = [300, 500, 700, 850, 1000, 1250, 1500] # add points in between# interpolate your data for the new points in x2p1 = np.interp(x2,x,y1)
p2 = np.interp(x2,x,y2)
p3 = np.interp(x2,x,y3)
p4 = np.interp(x2,x,y4)

# cubic spline interpolation on xp, so it looks smoothp1 = scipy.interpolate.CubicSpline(x2,p1)
p2 = scipy.interpolate.CubicSpline(x2,p2)
p3 = scipy.interpolate.CubicSpline(x2,p3)
p4 = scipy.interpolate.CubicSpline(x2,p4)

Here's what it looks like:

smooth curves

If you're not satisfied with the way this looks, you can try different values in x2.

EDIT:

Here is the full code to produce the plot:

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

x =  [300,      700,      1000,       1500] # your orginial x
x2 = [300, 500, 700, 850, 1000, 1250, 1500] # add points in between
xp = np.linspace(300,1500,100,endpoint=True) # your x-axis for smooth curve plot# your orginal data
y1 = [-1.0055394199673442, -0.11221578805214968, -1.502661406039569, 1.0216939169819494]
y2 = [-1.0200777228890747, -0.6951505674297687, -2.832988761335546, 1.0253075071285915]
y3 = [2.0502387421569463, -1.3363305947335058, 0.2893545237634795, 0.8692051683379767]
y4 = [1.8676528391899183, -1.7554177636905024, 0.2364994810496486, 0.9811885784744991]

for yi in [y1,y2,y3,y4]:
    # Piecewise linear interpolation of data y over the points x2
    y_interpolated_over_x2 = np.interp(x2,x,yi)

    # Make a cubic spline from the manipulated data
    y_cubic_spline = CubicSpline(x2, y_interpolated_over_x2)

    # The smooth curve is the cubic spline evaluated at points xp
    y_smooth = y_cubic_spline(xp)

    plt.plot(xp, y_smooth) # plot the smooth curve
    plt.scatter(x, yi) # plot the original data points

plt.show()

Post a Comment for "Smoothing A Curve With Vectors Made By Few Elements?"