2016-09-29 90 views
0

我試圖用scipy curve_fit對我的數據進行多元對數迴歸,結果期望得到一條線,但得到一條曲線。 這裏是我使用的代碼:scipy的curve_fit沒有收到預期的結果

Quercetin=[23,195,6,262,272,158,79,65,136,198] 
Naringenin=[11,4,8,6,6,7,6,9,7,9] 
Rutin=[178,165,93,239,202,3325,4427,7607,3499,1762] 
TEAC=[23,189,37,265,290,267,362,388,364,321] 

import matplotlib.pyplot as plt 
import scipy 
from scipy.optimize import curve_fit 
import numpy as np 
def func(x, a, b, c, d,e): 
    m=np.log(a*x[0]+b*x[1]+c*x[2]) 
    return d*(m)+e 
x=scipy.array([Quercetin, Naringenin,Rutin]) 
y=scipy.array(TEAC) 
popt, pcov = curve_fit(func, x ,y) 
print (popt) 

plt.plot(func(x,*popt),y,'ro-') 
plt.show() 

我得到這樣的結果: enter image description here

,而我想要得到的東西是這樣的:

enter image description here

任何人都可以請給我我做錯了什麼暗示? 如果這個問題我使用Windows 10上的蟒蛇Python 3.0。

回答

2

(我假設這個問題真的是關於繪圖)。 您正在詢問matplotlib以繪製直線連接的紅點('ro')(-)。 Matplotlib以任何順序強制和連接它們。

如果要繪製一條線,只繪製它分開:

In [58]: yres = func(x, *popt) 

In [59] plt.plot(yres, y, 'ro') 
Out[59]: [<matplotlib.lines.Line2D at 0x7f5c0796b828>] 

In [60]: plt.plot([0, 400], [0, 400], '-') 
Out[60]: [<matplotlib.lines.Line2D at 0x7f5c07a9c860>] 
+0

謝謝。我真的忽視了我用來繪製的方式將被繪製點連線!但是,在我看來,將繪製一條簡單的y = x線,而我想繪製curve_fit擬合的線。 –