忽略远离平均gnuplot的点

时间:2013-10-10 12:32:15

标签: gnuplot

我试图使用gnuplot绘制一组数据点的直线。问题是有些点远离平均拟合线,我想忽略它们,因为它们以不好的方式影响线的斜率。你怎么能这样做?

感谢。

1 个答案:

答案 0 :(得分:2)

一种方法是进行一次拟合,然后用第二个函数重新拟合,并根据相对于第一个拟合的值区分一些数据点。为了区分异常值,我为它们分配了一个非常高的方差(在第三个using列中)。在第二列中使用带有1/0的未定义数据值不起作用。

考虑文件test.dat

1 1
2 2
3 5
4 4

适合使用:

f(x) = a*x + b
g(x) = c*x + d
fname = 'test.dat'
limit = 1

fit f(x) fname via a,b
fit g(x) fname using 1:2:(abs(f($1)-$2) < limit ? 1 : 1000) via c,d

set key left
set offset 0.5,0.5,0.5,0.5
plot f(x), g(x), fname

4.6.3的结果是:

enter image description here

使用声明的说明

使用using关键字,您可以选择使用数据文件的哪些列。最简单的情况是using 1:2,它将第一列用作x,将第二列用作y(这在第一个fit调用中隐含地假设)。用例如using 1:2:3可以使用第三列作为相应数据点的权重(在fit命令的情况下)。这里,较高的值意味着较大的差异,因此保真度较低(请参阅fit命令的文档)。

不仅可以选择列,还可以执行using 1:($2*2)之类的计算,将第二列乘以2,并将结果作为y - 值。 $2column(2)的简写,整个语句的括号是必需的。

因此,using 1:2:(abs(f($1)-$2) < limit ? 1 : 1000)执行以下操作:f($1)是先前适合某个x值的值,$2是相应的y -value来自数据文件。因此,如果数据abs(f($1) - $2)的距离y - 来自先前拟合结果的值低于limit,那么1将用作权重。否则会使用非常大的1000权重,这会导致几乎忽略此数据点。