2017-04-14 95 views
0

我有一個代碼:線性迴歸:延長線的過去的數據並添加圖例

import math 
import numpy as np 
import pylab as plt1 
from matplotlib import pyplot as plt 

uH2 = 1.90866638 
uHe = 3.60187307 
eH2 = 213.38 
eHe = 31.96 

R = float(uH2*eH2)/(uHe*eHe) 

C_Values = [] 
Delta = [] 
kHeST = [] 
J_f21 = [] 
data = np.genfromtxt("Lamda_HeHCL.txt", unpack=True); 
J_i1=data[1]; 
J_f1=data[2]; 
kHe=data[7] 

data = np.genfromtxt("Basecol_Basic_New_1.txt", unpack=True); 
J_i2=data[0]; 
J_f2=data[1]; 
kH2=data[5] 

print kHe 
print kH2 

kHe = map(float, kHe) 
kH2 = map(float, kH2) 

kHe = np.array(kHe) 
kH2= np.array(kH2) 

g = len(kH2) 

for n in range(0,g): 
    if J_f2[n] == 1:  
     Jf21 = J_f2[n] 
     J_f21.append(Jf21) 
     ratio = kHe[n]/kH2[n] 
     C = (((math.log(float(kH2[n]),10)))-(math.log(float(kHe[n]),10)))/math.log(R,10) 
     C_Values.append(C) 
     St = abs(J_f1[n] - J_i1[n]) 
     Delta.append(St) 

print C_Values 
print Delta 
print J_f21 

fig, ax = plt.subplots() 
ax.scatter(Delta,C_Values) 

for i, txt in enumerate(J_f21): 
    ax.annotate(txt, (Delta[i],C_Values[i])) 

plt.plot(np.unique(Delta), np.poly1d(np.polyfit(Delta, C_Values, 1))(np.unique(Delta))) 

plt.plot(Delta, C_Values) 

fit = np.polyfit(Delta,C_Values,1) 
fit_fn = np.poly1d(fit) 
# fit_fn is now a function which takes in x and returns an estimate for y 

plt.scatter(Delta,C_Values, Delta, fit_fn(Delta)) 
plt.xlim(0, 12) 
plt.ylim(-3, 3) 

在該代碼中,我試圖繪製延伸過去的數據,並觸摸該x軸的線性迴歸。我也試圖給圖表添加一個圖例,以顯示圖表的斜率。使用代碼,我能夠繪製這個圖。

enter image description here

這是我一直在使用,試圖延長線和圖例添加到我的代碼一些垃圾數據。

x =[5,7,9,15,20] 
y =[10,9,8,7,6] 

除了線性迴歸線以外,我還希望它是分散的。

+0

你能準確地知道你用這段代碼得到了什麼嗎? – Astrom

回答

1

既然你不提供你從文件我無法測試這個加載數據,但是從我的頭頂:

延長過去的情節線,你可以把這個線

plt.plot(np.unique(Delta), np.poly1d(np.polyfit(Delta, C_Values, 1))(np.unique(Delta))) 

成類似

x = np.linspace(0, 12, 50) # both 0 and 12 are from visually inspecting the plot 
plt.plot(x, np.poly1d(np.polyfit(Delta, C_Values, 1))(x)) 

但是,如果你想延長線與x軸,

polynomial = np.polyfit(Delta, C_Values, 1) 
x = np.linspace(0, *np.roots(polynomial)) 
plt.plot(x, np.poly1d(polynomial)(x)) 

至於散點圖的事情,在我看來,你可以只刪除此行:

plt.plot(Delta, C_Values) 

哦,對了,至於傳說中,添加一個label給你做,這樣的情節:

plt.plot(x, np.poly1d(polynomial)(x), label='Linear regression') 

,只是plt.show()前添加到plt.legend()通話。

+0

這工作得很好,但我有一個小問題。當我嘗試做標籤='y = m * x + b'時,它只是給出字符串y = mx + b。你知道如何讓它說出exame y = 5 * x + 10的數字。 – Cosmoman

+0

做'label =「{} x + {}」。format(m,b)'。您可能需要谷歌蟒蛇數字字符串格式,讓它看起來不錯。 – Perfi