gnuplot:プロットコマンドの変数値と定義

Sep 24 2020

私はちょうど次のものに出くわしました:

gnuplotのマニュアルによると、プロット要素には定義が含まれている場合があります。

Syntax: 

      plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}

Each plot element consists of a definition, a function, or a data source 
together with optional properties or modifiers: 

      plot-element:
           {<iteration>}
           <definition> | {sampling-range} <function> | <data source>
                        | keyentry
           {axes <axes>} {<title-spec>}
           {with <style>}

次の例を確認してください。

  • 最初のグラフy=x+1は、a=1以前に定義されたためにプロットされています。予想通り。

  • 2番目のグラフと最初のplotコマンドの場合、同じである必要がありますが、y=2*x+1代わりにプロットされます(2回)。

  • 3番目のグラフでは、a=1が明示的に指定されている場合、期待どおりにプロットされます。

gnuplota=1が2番目のグラフを無視するのはなぜですか?私は何かを誤解しましたか?

コード:

### definitions in plot command
reset session

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

set yrange[-40:40]
set multiplot layout 1,3
    plot     f(x)
    plot     f(x), a=2 f(x), a=3 f(x)
    plot a=1 f(x), a=2 f(x), a=3 f(x)
unset multiplot
### end of code

結果:

回答

4 Ethan Sep 24 2020 at 11:29

あなたの診断は少しずれています。2番目のパネルでは、最初の紫色のプロットがa = 2プロットではなくa = 3プロットと重ね合わされています。

どうして?gnuplotは、実際にそれらの要素を描画する前に、完全なプロットのすべての要素を蓄積するためです。これには、コマンドラインを2回通過することが含まれます。上記のデータソースからデータを解析してロードするための1回のパス(たとえば、自動スケーリングに必要)、次に範囲全体の関数を評価するための2回目のパス(自動スケーリングによって決定された可能性があります)。ここでの最初のパスでは、aは2に設定され、次に3に設定されます。2番目のパスの開始時、aはまだ3であり、変更するための初期定義がない場合、f(x)が評価されるときに使用されます。 。