Gnuplot 从文件中提取函数范围内的每一行

Gnuplot pull function range from a file for each row

我正在尝试显示一个函数,该函数是每个范围内具有不同系数的线性函数 f(x)=a*x+b。我的文件 (output.txt) 看起来像这样但没有 header:

a          b        range
-0.0645991 0.439102 0    0.25
-0.230142  0.480488 0.25 0.5
-0.438559  0.584697 0.5  0.75
-0.66962   0.757993 0.75 1
-0.898603  0.986975 1    1.25
-1.09846   1.2368   1.25 1.5
-1.24232   1.45259  1.5  1.75
-1.30601   1.56404  1.75 2

我已经尝试过这些线路,但其中 none 有效:

plot "output.txt" using 1:2 with lines, set xrange using 3:4

plot "output.txt" [():()] ()*x+()

plot "output.txt" <=x<= ? ()*x+() : 0

这是我第一次使用 Gnuplot,我找不到任何从文件中提取范围的示例。

欢迎使用 Whosebug!您可以简单地使用绘图样式 with vectors。 检查 help vectors。 绘图命令看起来很复杂,但它很简单。 您需要的四个值是:xydelta xdelta y,即 在你的例子中

  • x:第 3 列
  • y: f(x,a,b) 其中 x 是第 3 列,ab 分别来自第 1 列和第 2 列。
  • dx: 第 4 列减去第 3 列
  • dy: f(x,a,b) 其中 x 来自第 4 列减去 f(x,a,b) 其中 x 来自第 3 列和 a,b 如上.

如果在绘图命令中指定 nohead,则可以跳过箭头。检查 help arrow.

代码:

### plotting style with vectors
reset session

$Data <<EOD
a          b        range
-0.0645991 0.439102 0    0.25
-0.230142  0.480488 0.25 0.5
-0.438559  0.584697 0.5  0.75
-0.66962   0.757993 0.75 1
-0.898603  0.986975 1    1.25
-1.09846   1.2368   1.25 1.5
-1.24232   1.45259  1.5  1.75
-1.30601   1.56404  1.75 2
EOD

f(x,a,b) = a*x + b

plot $Data u 3:(f(,,)):(-):(f(,,)-f(,,)) w vectors lc "red" head title "my function"
### end of code

结果: