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数字字符串格式,以使其看起来好看。