【问题标题】:gnuplot: variable values and definitions in plot commandgnuplot:绘图命令中的变量值和定义
【发布时间】:2020-09-24 03:57:17
【问题描述】:

我只是偶然发现了以下内容:

根据 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>}

检查以下示例:

  • 因为a=1 是之前定义的,所以绘制了第一张图y=x+1。正如预期的那样。

  • 对于第二个图形和第一个绘图命令,它应该是相同的,但 y=2*x+1 被绘制(两次)。

  • 在第三张图中,当明确指定 a=1 时,它按预期绘制。

为什么 gnuplot 忽略了第二张图的 a=1? 我是不是误会了什么?

代码:

### 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

结果:

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    您的诊断结果稍有偏差。在第二个面板中,第一个紫色图与 a=3 图而不是 a=2 图叠加。

    为什么?因为 gnuplot 在实际绘制任何元素之前会累积完整绘图的所有元素。这涉及在命令行上进行两次传递。一次解析和加载来自提到的任何数据源的数据(例如自动缩放所需),然后第二遍评估范围内的任何函数(可能由自动缩放确定)。在此处的第一遍中,a 设置为 2,然后设置为 3。在第二遍开始时,a 仍然为 3,并且在没有初始定义来更改它的情况下,这是评估 f(x) 时使用的.

    【讨论】:

    • 感谢您的解释。好吧,不知道这两个通行证。知道“幕后”发生了什么总是好的。
    • 我遇到了同样的问题。对于大多数用户来说,结果是出乎意料的。
    • 也许吧。但是考虑一下,即使它在您第一次发出plot 命令时表现得像您显然期望的那样,它在replot 上的作用也会有所不同,原因与实际行为完全相同——变量a 的值有在此期间发生了变化。
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多