【问题标题】:Gnuplot workflow involving loops of fits that get multiplottedGnuplot 工作流程涉及多图的拟合循环
【发布时间】:2013-12-02 16:41:12
【问题描述】:

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

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

但是,我无法使用 gnuplot 中可用的循环来使其工作。 起作用的是例如创建一个文件,它可以满足我对 N 的要求,然后运行一个通过 N=1...M 的外部循环。

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

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

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

那么我有两个问题:

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

【问题讨论】:

    标签: loops gnuplot


    【解决方案1】:

    您可以根据 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))
    }
    

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

    但是为了对键中的拟合和数据进行分组,您可以使用replot 添加图。而且您必须使用macros 才能在图中获得正确的功能,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。

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2019-06-01
      • 1970-01-01
      相关资源
      最近更新 更多