【问题标题】:Linear Regression: Extending line past data and adding a legend线性回归:延长线过去的数据并添加图例
【发布时间】:2017-04-15 04:35:01
【问题描述】:

我有一个代码:

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]

我也希望它是一个散点,除了线性回归线。

【问题讨论】:

  • 你能准确地说出你用这段代码得到了什么pb吗?

标签: python plot


【解决方案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() 的调用。

【讨论】:

  • 这很好用,但我遇到了一个小问题。当我尝试执行 label = 'y = m*x + b' 时,它只是给出了字符串 y = mx + b。你知道如何让它说出考试的数字 y = 5*x + 10。
  • label = "{}x + {}".format(m, b)。您可能需要谷歌 python 数字字符串格式才能让它看起来不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2021-05-21
  • 2020-03-13
  • 1970-01-01
  • 2017-06-21
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多