gnuplot - 忽略远离平均 gnuplot 的点

标签 gnuplot

我正在尝试使用 gnuplot 通过一组数据点绘制一条直线。问题是,有些点远离平均拟合线,我想忽略它们,因为它们对线的斜率产生了不好的影响。你怎么能做到这一点?

谢谢。

最佳答案

一种方法是进行一次拟合,然后使用第二个函数重新进行拟合,并根据相对于第一次拟合的值来区分一些数据点。为了区分异常值,我为它们分配了非常高的方差(在第三 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关键字您可以选择使用数据文件的哪些列。最简单的情况是using 1:2 ,它将第一列用作 x第二个为 y (这是在第一个 fit 调用中隐含假设的)。例如using 1:2:3可以使用第三列作为相应数据点的权重(在 fit 命令的情况下)。在这里,高值意味着大方差,因此保真度低(请参阅 fit 命令的文档)。

除了选择列之外,还可以进行像using 1:($2*2)这样的计算,将第二列乘以 2并将结果视为 y -值(value)。 $2column(2) 的简写,整个语句需要用括号括起来。

所以,using 1:2:(abs(f($1)-$2) < limit ? 1 : 1000)执行以下操作:f($1)是某个 x 的先前拟合值值,$2对应的是y -数据文件中的值。所以,如果距离abs(f($1) - $2)数据 y -先前拟合结果的值低于 limit ,然后1被用作权重。否则权重非常大 1000使用,这导致几乎忽略这个数据点。

关于gnuplot - 忽略远离平均 gnuplot 的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19295837/

相关文章:

python - 如何在调用 gnuplot 时保持 PyQt5 响应?

linux - gnuplot 中吞吐量的明显差异

python - 绘制点云并移动相机

gnuplot 在具有单列数据的同一张图上绘制两个图

C++:如何将数据输出到多个.dat 文件?

bash - 如何在 gnuplot 上将变量传递给 -e?

c++ - Gnuplot - 保存输出

c - 在运行时使用 gnuplot 从 c 绘图

Gnuplot BibTeX 引文

gnuplot - 如何完全重置 gnuplot?