2016-09-08 4 views
1

私のデータポイントのトレンドカーブをプロットしたい。 ]私はなめらかな傾向曲線を入手するにはどうすればよいデータを通るトレンドカーブが滑らかになるべきときに前後にジャンプ

質問

enter image description here

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() 

しかし、私はこの結果を得た:私は、指数モデルで、このコードでいることをやった このデータを通して?

答えて

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

関連する問題