问题描述
我偶然发现了以下内容:
根据gnuplot手册,plot元素可能包含定义。
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>}
检查以下示例:
为什么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=3 f(x)
unset multiplot
### end of code
结果:
解决方法
您的诊断略有下降。在第二个面板中,第一个紫色图与a = 3图而不是a = 2图叠加。
为什么?因为gnuplot在实际绘制任何图元之前会先累积完整图的所有元素。这涉及在命令行上进行两次传递。一遍分析和加载来自提到的任何数据源的数据(例如,需要自动缩放),然后第二遍评估范围内的任何函数(可能由自动缩放确定)。在第一遍过程中,将a设置为2,然后设置为3。在第二遍过程的开始,a仍为3,并且在没有初始定义可更改的情况下进行更改,这是计算f(x)时使用的定义。