I would use SciPy :
import numpy as np from scipy import interpolate import matplotlib.pyplot as plt # Original points x = np.array([2000, 2500, 3000, 4000, 5000], dtype=np.float64) y = np.array([0.032, 0.034, 0.040, 0.040, 0.038], dtype=np.float64) # Points to interpolate X = np.linspace(x.min(), x.max(), 21) # different interpolation methods (functions) f_linear = interpolate.interp1d(x, y, kind='linear') f_nearest = interpolate.interp1d(x, y, kind='nearest') f_zero = interpolate.interp1d(x, y, kind='zero') f_slinear = interpolate.interp1d(x, y, kind='slinear') # spline interp. of 1st order f_quadratic = interpolate.interp1d(x, y, kind='quadratic') # spline interp. of 2nd order f_cubic = interpolate.interp1d(x, y, kind='cubic') # spline interp. of 3rd order # plot plt.style.use('ggplot') plt.figure(figsize=(20, 14)) # plot interpolated points plt.plot(X, f_linear(X), '-o', X, f_nearest(X), '-^', #X, f_zero(X), '-*', X, f_slinear(X), '-*', X, f_quadratic(X), '-D', X, f_cubic(X), '-H', linewidth=1.5) # plot original points plt.scatter(x, y, marker='o', s=500, c='green') plt.legend(['Linear', 'Nearest', 'Linear Spline', 'Quadratic Spline', 'Cubic Spline', 'Original points']) plt.xlim(x.min() * 0.95, x.max() * 1.05) plt.show()
