loops - Gnuplot 工作流程涉及多重绘图的拟合循环

标签 loops gnuplot

我想在 gnuplot 中执行以下操作: 读取我的文件,这些文件被方便地标记为“filenameN.txt”,其中 N 是第 N 个文件。

使用 aN、bN、... 将一些多项式 fN(x) 拟合到数据中 并使用 multiplot 将所有这些绘制在单个图形(多个图)中

但是,我无法使用 gnuplot 中可用的循环来使其工作。 有效的方法是创建一个文件,它可以完成我想要的 N,然后运行一个传递 N=1...M 的外部循环。

这会产生 M 个图,但不会产生单个多重图。

为此,我需要为拟合分配具有变量名称(f1,f2,... a1,a2,...,...)的变量(因为我可能想以某种方式将它们全部一起使用) )

我还希望绘图循环在多重图中生成简单的绘图(每个绘图包含数据及其拟合,M次,而不是第一个绘图包含所有行,其余绘图为空的多重绘图。

所以我有两个问题:

  • 如何分配变量变量名
  • 如何在多图布局中使用循环

最佳答案

您可以根据 N 定义函数,例如:

fstr(N) = sprintf('f%d(x) = a%d*x**2 + b%d*x + c%d', N, N, N, N)
eval(fstr(1))

这定义了函数f1(x) = a1*x**2 + b1*x + c1。对于拟合函数,您必须执行相同的操作:

fitstr(N) = sprintf('fit ''filename%d.txt'' f%d(x) via a%d,b%d,c%d', N, N, N, N, N)

然后你首先进行所有拟合:

do for [i=0:N] {
    eval(fstr(i))
    eval(fitstr(i))
}

然后绘制每个数据文件的和相应的拟合线。为了将所有图绘制在一张图中,您必须使用单个 plot 命令并用逗号分隔图。

但是为了将拟合和数据分组到键中,您可以使用replot来添加绘图。并且您必须使用来获取图中的正确函数,eval在这里不起作用:

set style data points
set style func lines
plot 'filename0.txt' lt 1, f0(x) lt 1
set macros
do for [i=1:N] {
    f = sprintf('f%d(x)', i)
    replot sprintf('filename%d.txt', i) lt (i+1), @f lt (i+1)
}

只需将所有内容放在一个文件中并使用它运行 gnuplot。

关于loops - Gnuplot 工作流程涉及多重绘图的拟合循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263039/

相关文章:

python - while循环中条件改变了,是否结束?

sql - 在没有 'foreach' 的情况下检索 Webmatrix 中的数据

linux - gnuplot bash 脚本变量

gnuplot - 如何在 gnuplot 中标记 90 个百分位

python - 迭代 python 字典中的单个维度

scala - 编译 for 循环时出现奇怪的错误

javascript - 使用 moo 工具的 Fx.Slide 操纵许多滑动对象的最佳方式

gnuplot - gnuplot 中的水平直方图

graph - 使用 gnuplot 绘制点的标记坐标

python - 在 xubuntu 上使用 gnuplot 保存图表