我有以下数据框:
x y error_on_y
1 1.2 0.1
2 0.87 0.23
4 1.12 0.11
5 0.75 0.06
5 0.66 0.15
6 0.98 0.08
7 1.34 0.05
7 2.86 0.12
在此框架下,我想使用np.polyfit来拟合回归线。
我已经使用以下方法安装了该生产线:
x = np.array(dataframe['x'])
y = np.array(dataframe['y'])
y_err = np.array(dataframe['error_on_y'])
np.polyfit(x,y,deg=1, w=1/y_err, cov=True)
但是我找不到如何用我在python中定义的错误来绘制这种拟合。到目前为止,我发现使用np.polyfit进行绘图的唯一示例是不包含指定权重的拟合。
有谁知道我将如何绘制这条线?还是有人知道与血统实例的链接?我一个人都找不到,而且我已经寻找了很长一段时间,因此,对此问题的任何专业知识都将受到欢迎和赞赏!
编辑/说明:
当未在函数中定义weight(w)时,polyfit函数将返回单个矢量,其系数使平方误差最小。但是,在定义w时,还会添加另一个向量:
np.polyfit(x,y,deg=1, w=1/y_err, cov=True)
输出:
(array([0.00097481, 0.82290694]), array([[ 4.75261249e-09, -2.28408710e-07],
[-2.28408710e-07, 1.41696109e-05]]))
编辑/其他信息:
找到此链接(https://peteris.rocks/blog/extrapolate-lines-with-numpy-polyfit/)后,我发现具有未定义权重的polyfit函数仅返回第一个数组。即
vector = array([0.00097481, 0.82290694])
在行函数y = mx + b中
m =vector[0] and b = vector[1]
。 aka m =斜率,b =截距。这意味着以上示例中的附加向量必须是函数中定义的权重的结果。我试图找到我应该如何用包含的权重来解释/绘制这个图:)
可能的答案:
我发现以下内容:
import numpy as np
new = np.polyfit(x,y,deg=1, w=1/y_err, cov=True)
m, b = new[0]
a,c = new[1][0]
d,e = new[1][1]
m, b, a,c, d,e
for i in range(min(x), max(x)):
plt.plot(i, i * m + b, 'go')
plt.plot(i, i * (m+a) + (b+c), 'bo')
plt.plot(i, i * (m-d) + (b-e), 'ro')
plt.show()
在这个例子中,我假设第一个数组/向量在
(array([0.00097481, 0.82290694]), array([[ 4.75261249e-09, -2.28408710e-07],
[-2.28408710e-07, 1.41696109e-05]]))
是拟合回归线的系数。以下2个数组将是回归线上的错误。这是我尝试过的,我相信这是有道理的。但是,它不是确定的,因此我将保留该职位以征求意见和评论/更好的解决方案。
最佳答案
当您执行np.polyfit(x,y,deg=1, w=1/y_err, cov=True)
时,您正在计算(其中包括)多项式的系数。要轻松操纵这些系数,您可以创建一个多项式对象
p, mycov = np.poly1d(np.polyfit(x,y,deg=1, w=1/y_err, cov=True))
并使用绘制
x_plot = np.linspace(1, 7, 100)
plt.plot(x_plot, p(x_plot))
关于python - python中y处不确定的np.polyfit图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51420951/