2017-02-24 48 views
0

給定兩個數組x和y,我試圖用np.polyfit功能,以適應數據,使用以下方法:如何適應數據,然後從擬合函數樣繪製曲線

z = np.polyfit(x, y, 20) 
f = np.poly1d(z) 

但是因爲我想繪製一條線條圖而不是一條光滑的曲線,所以我使用這個函數f來繪製一條繪製線的數組。

x_new = np.linspace(x[0], x[-1], fitting_size) 
y_new = np.zeros(fitting_size) 
for t in range(fitting_size): 
    y_new[t] = f(x_new[t]) 

plt.plot(x_new, y_new, marker='v', ms=1) 

問題是,上面的段代碼仍然給我一個平滑的曲線。我該如何解決它?謝謝。

回答

2

不幸的是,問題背後的意圖是有點不清楚。但是,如果要執行線性擬合,則需要提供deg=1polyfit的程度。那麼沒有理由從合適的樣本中抽樣。可以簡單地使用相同的輸入數組並將擬合函數應用於它。

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(-1,5,20) 
y = 3*x**2+np.random.rand(len(x))*10 

z = np.polyfit(x, y, 1) 
f = np.poly1d(z) 

z2 = np.polyfit(x, y, 2) 
f2 = np.poly1d(z2) 


plt.plot(x,y, marker=".", ls="", c="k", label="data") 
plt.plot(x, f(x), label="linear fit") 
plt.plot(x, f2(x), label="quadratic fit") 
plt.legend() 
plt.show() 

enter image description here

+0

謝謝您的真誠援助。 – ytutow