适合数据集的基本线性插值
通过一个简单的例子可以很好地解释拟合的基本用法:
`f(x)` = a + b*x + c*x**2 fit [-234:320][0:200] `f(x)` ’measured.dat’ using 1:2 skip 4 via a,b,c plot ’measured.dat’ u 1:2, `f(x)`
可以指定范围来过滤拟合中使用的数据。忽略超出范围的数据点。 (T. Williams,C。Kelley - gnuplot 5.0,交互式绘图程序 )
线性插值(用线拟合)是拟合数据集的最简单方法。假设你有一个数据文件,你的 y 数量的增长是线性的,你可以使用
[…]线性多项式,用于构建一组离散的已知数据点范围内的新数据点。 (来自维基百科, 线性插值 )
具有一年级多项式的示例
我们将使用以下数据集,名为 house_price.dat
,其中包括某个城市房屋的平方米,价格为 1000 美元。
### 'house_price.dat'
## X-Axis: House price (in $1000) - Y-Axis: Square meters (m^2)
245 426.72
312 601.68
279 518.16
308 571.50
199 335.28
219 472.44
405 716.28
324 546.76
319 534.34
255 518.16
让我们用 gnuplot 调整这些参数命令本身非常简单,你可以从语法中注意到,只需定义你的拟合原型,然后使用 fit
命令得到结果:
## m, q will be our fitting parameters
f(x) = m * x + q
fit f(x) 'data_set.dat' using 1:2 via m, q
但是在绘图本身中使用获得的参数也可能很有趣。下面的代码将适合 house_price.dat
文件,然后绘制 m
和 q
参数以获得数据集的最佳曲线近似。一旦你有参数,你可以计算 y-value
,在这种情况下是房价,从任何给定的 x-vaule
( 房子的平方米 )只是在公式中代替
y = m * x + q
适当的 x-value
。让我们评论一下代码。
0.设置术语
set term pos col
set out 'house_price_fit.ps'
1.修饰图的普通管理
set title 'Linear Regression Example Scatterplot'
set ylabel 'House price (k$ = $1000)'
set xlabel 'Square meters (m^2)'
set style line 1 ps 1.5 pt 7 lc 'red'
set style line 2 lw 1.5 lc 'blue'
set grid
set key bottom center box height 1.4
set xrange [0:450]
set yrange [0:]
2.合适
为此,我们只需要输入命令:
f(x) = m * x + q
fit f(x) 'house_price.dat' via m, q
3.将 m
和 q
值保存在字符串中并绘图
在这里,我们使用 sprintf
函数来准备标签(在 object rectangle
中加框),我们将在其中打印拟合的结果。最后,我们绘制整个图。
mq_value = sprintf("Parameters values\nm = %f k$/m^2\nq = %f k$", m, q)
set object 1 rect from 90,725 to 200, 650 fc rgb "white"
set label 1 at 100,700 mq_value
p 'house_price.dat' ls 1 t 'House price', f(x) ls 2 t 'Linear regression'
set out
输出将如下所示。