I have the following dataframe:
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进行绘图的唯一示例是没有涉及指定权重的拟合线。
有人知道我该如何绘制这条线吗?还是有人知道一个好的例子链接?我自己找不到一个很好的示例已经找了相当长时间,所以对此问题的任何专业知识都将非常受欢迎和感激!
编辑/澄清:
当未在函数中定义权重(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]
,b = vector [1]
。也就是说,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]]))
这些系数用于拟合回归线。下面的两个数组表示回归线上的误差。我尝试了以下方法,我认为这很有道理。但这并不是最终确定的方案,所以我会开放帖子供大家评论、提出意见和更好的解决方案。