我使用以下脚本进行绘图和拟合。
数据集:
2.474 2.659
0.701 2.637
0.582 2.643
0.513 2.666
0.403 2.639
0.308 2.615
0.218 2.561
0.137 2.537
脚本:
reset
set key bottom right
f(x) = a*atan(x/b); a = 2.65; b = 2.5
fit f(x) 'test.txt' u 1:2 via a,b
plot 'test.txt' u 1:2 w p not, f(x) t 'f(x)'
情节如下:
我试图在min_y和max_y之间限制它。以下直观的代码非常失败,
fit [y=2.537:2.659] f(x) 'test.txt' u 1:2 via a,b
任何关于限制的建议都将受到高度赞赏!谢谢!
答案 0 :(得分:1)
range选项仅指定应使用哪些输入点,而不是限制输出。从手册中我可以看出,对f(x)输出值的限制实际上是不可能的(而且从我能从问题中看出来,并不是真的可取)。
答案 1 :(得分:0)
这是一个古老的问题,但是我来到这里寻找类似问题的解决方案。答案是使用stats命令:
stats 'test.txt'
默认情况下,这将分析y数据并设置一堆STATS_*
变量,您可以将它们与三元运算符一起在fit语句中使用:
fit f(x) 'test.txt' u 1:($2 >= STATS_min && $2 <= STATS_max ? $2 : NaN) via a,b
如果需要,您还可以在stats
语句中添加using子句,以进一步过滤数据以匹配fit语句。
答案 2 :(得分:0)
您还应该能够简单地通过定义适合范围[][]
来做到这一点。
以下代码也适用于2014年版本的gnuplot4.6。
“ Data.dat”:
1 2
2 3
3 4
1 9
2 8
3 7
代码:
### fit with limited y-range
reset
set xrange[0:10]
set yrange[0:10]
f(x) = a*x + b
set multiplot layout 3,1
fit [*:*][0:5] f(x) "Data.dat" u 1:2 via a,b
plot "Data.dat" u 1:2 w p pt 7 lc rgb "red" not,\
f(x) t sprintf("Fitrange: [*:*][0:5]\nf(x) = %g*x + %g",a,b)
fit [*:*][5:10] f(x) "Data.dat" u 1:2 via a,b
plot "Data.dat" u 1:2 w p pt 7 lc rgb "red" not,\
f(x) t sprintf("Fitrange: [*:*][5:10]\nf(x) = %g*x + %g",a,b)
fit [*:*][0:10] f(x) "Data.dat" u 1:2 via a,b
plot "Data.dat" u 1:2 w p pt 7 lc rgb "red" not,\
f(x) t sprintf("Fitrange: [*:*][0:10]\nf(x) = %g*x + %g",a,b)
unset multiplot
### end of code
结果: