Это потому, что np.polyfit
возвращает коэффициенты полинома для степени n , а не фактическую подгоночную кривую.Например,
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z = np.polyfit(x, y, 0) # Fit with polynomial of degree 0
z3 = np.polyfit(x, y, 3) # Fit with polynomial of degree 3
print(z)
print(z3)
[-0.]
[ 0.08703704 -0.81349206 1.69312169 -0.03968254]
Этот вывод означает, что для уравнения ax^3 + bx^2 + cx + d = 0
, a = 0.08703704, b = -0.81349206, c = 1.69312169, d = -0.03968254
.Чтобы подогнать эту кривую к данным x
, вы можете сделать
w = np.poly1d(z) # Create polynomial using the coefficients in z in the forma above
w3 = np.poly1d(z3)
# Plot raw data
plt.plot(x, y, 'b')
# Plot constant line
plt.plot(x, w(x), 'g')
#Plot fitted curve
plt.plot(x, w3(x), 'r')
График равен .Для вашего кода, поскольку вы строите линию с нулевым наклоном, вы можете сделать
range1fit = np.poly1d(np.polyfit(range1t,range1v,0))
range2fit = np.poly1d(np.polyfit(range2t,range2v,0))
, который создает полином с использованием np.poly1d
.
Тогда сюжет как
plt.plot(range1t, rangefit1(range1t))
plt.plot(range2t, rangefit2(range2t))