Python 线性回归:将线延伸到数据上方并添加图例

Python 线性回归:将线延伸到数据上方并添加图例,python,plot,Python,Plot,我有一个密码: 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.genfr

我有一个密码:

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轴。我还试图在绘图中添加一个图例,显示绘图的坡度。使用代码,我能够绘制出这个图表

下面是一些垃圾数据,我一直在使用它们来尝试扩展代码行,并在代码中添加图例

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

除线性回归线外,我还希望它是分散的。

鉴于您没有提供从文件中加载的数据,我无法对此进行测试,但我想:

若要将该线延伸过绘图,可以旋转该线

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)
哦,对了,对于图例,在绘制的图中添加一个
标签,如下所示:

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

并在
plt.show()
之前添加一个对
plt.legend()
的调用,你能精确地知道你用这段代码得到了什么吗?这很有效,但我有一个小问题。当我尝试使用label='y=m*x+b'时,它只是给出了字符串y=mx+b。你知道如何让它说出exame y=5*x+10的数字吗。您可能需要谷歌python数字字符串格式,以使其看起来好看。