如何限制yrange以适应gnuplot

时间:2014-01-02 08:00:06

标签: gnuplot

我使用以下脚本进行绘图和拟合。

数据集:

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)' 

情节如下:

enter image description here

我试图在min_y和max_y之间限制它。以下直观的代码非常失败,

fit [y=2.537:2.659] f(x) 'test.txt' u 1:2 via a,b

任何关于限制的建议都将受到高度赞赏!谢谢!

3 个答案:

答案 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

结果:

enter image description here