我有以下数据帧:
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)未在函数中定义时,多项式函数将返回具有最小化平方误差的系数的单个向量。然而,当定义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]
。又名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]]))
是拟合回归线的系数。下面两个数组是回归线上的错误。这就是我所尝试的,我相信这是有意义的。不过,这不是决定性的,所以我将开放这篇文章,以获得评论和评论/更好的解决方案。
发布于 2018-07-19 12:58:29
当你做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))
https://stackoverflow.com/questions/51420951
复制相似问题