我有以下数据框:

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/

10-13 21:40