2016-09-29 4 views
0

Ich habe versucht, multivariate logarithmische Regression auf meine Daten mit scipy curve_fit zu tun und als Ergebnis erwarten, eine Linie zu bekommen, aber eine Kurve zu bekommen. Hier ist der Code, den ich verwendet:Nicht erwartetes Ergebnis erhalten mit scipy's 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() 

Und ich dieses Ergebnis: enter image description here

während ich so etwas zu bekommen:

enter image description here

Kann mir jemand bitte geben ein Hinweis darauf, was ich falsch mache? Wenn das wichtig ist, verwende ich Python 3.5 von Anaconda auf Windows 10.

Antwort

2

(Ich gehe davon aus, dass die Frage wirklich über Plotten ist). Sie bitten matplotlib, rote Punkte ('ro') zu zeichnen, die durch gerade Linien verbunden sind (-). Matplotlib verpflichtet und verbindet sie in der Reihenfolge, in der sie gegeben werden.

Wenn Sie eine Linie zeichnen möchten, ist es nur separat Grundstück:

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

Danke. Ich habe wirklich übersehen, dass die Art, wie ich geplottet habe, Punkte sind, die durch Linien verbunden sind! Aber hier, wie ich sehe, wird eine Linie geplottet, die einfach y = x ist, während ich die von curve_fit angepasste Linie plotten möchte. –

Verwandte Themen