2017-04-14 90 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