2016-09-08 63 views
1

我想繪製我的數據點的趨勢曲線。 我這樣做,這個代碼與指數模型:趨勢曲線通過數據來回跳動時應該平滑

with open(file,'r') as csvfile: 
plots = csv.reader(csvfile, delimiter=',') 
next(plots) 
x=[] 
y=[] 
for row in plots: 
    x.append(float(row[1])) 
    y.append(float(row[3])) 
plt.plot(x, y, 'ro',label="Original Data") 
x = np.array(x, dtype=float) #transform your data in a numpy array of floats 
y = np.array(y, dtype=float) #so the curve_fit can work 



def func(x, a, b, c): 
    return (a*np.exp(-b*x)+c) 

popt, pcov = curve_fit(func, x, y) 
ypredict=func(x, *popt) 

plt.plot(x, ypredict, '--', label="Fitted Curve") 
plt.legend(loc='upper left') 
plt.show() 

但我得到這個結果:

enter image description here]

問題

我怎樣才能獲得平滑的趨勢曲線通過這些數據?

回答

0

的一種方式,你可以把x.sort()在繪製之前:

x.sort() 
ypredict=func(x, *popt) 

另一種方法是使用類似這樣(的情節更好地在我看來),

# 1000 evenly spaced points over the range of x values 
x_plot = np.linspace(x.min(), x.max(), 1000) 
y_plot=func(x_plot, *popt)  

然後使用x_ploty_plot爲您的趨勢線,它應該看起來不錯。問題很可能是因爲您的x值不是單調的,因此您的折線圖按照它們在x中出現的順序連接點。

+0

爲您做了這項工作? – benten