我有以下数据框:
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] 和 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]]))
是拟合回归线的系数。以下 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 - np.polyfit 图在 python 中具有不确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51420951/