';如果';a'中的语句;绘图';gnuplot中的命令

';如果';a'中的语句;绘图';gnuplot中的命令,plot,logic,gnuplot,Plot,Logic,Gnuplot,我正在编写一个gnuplot(5.2)脚本,如果设置了标志,我只想绘制某些函数或数据文件。使用gnuplot的一个例子是: if(flag==0){plot sin(x)} if(flag==1){plot sin(x), cos(x)} 因此,根据“flag”的值,我可以绘制稍微不同的图。但是,以上述方式执行此操作意味着对标志的每个设置重复plot命令,如果我的标志有多个设置,这将很快变得很困难。有没有办法在plot命令中使用“if”语句?例如,类似于: plot sin(x), if(f

我正在编写一个gnuplot(5.2)脚本,如果设置了标志,我只想绘制某些函数或数据文件。使用gnuplot的一个例子是:

if(flag==0){plot sin(x)}

if(flag==1){plot sin(x), cos(x)}
因此,根据“flag”的值,我可以绘制稍微不同的图。但是,以上述方式执行此操作意味着对标志的每个设置重复plot命令,如果我的标志有多个设置,这将很快变得很困难。有没有办法在plot命令中使用“if”语句?例如,类似于:

plot sin(x), if(flag==1){cos(x)}
因此,我只需使用一次“绘图”即可完成所有操作。

两个想法:

第一个想法使用三元运算符:

unset key
a = 1
plot sin(x), (a == 1 ? cos(x) : NaN)
根据您的需要,密钥处理会变得困难

第二个想法是根据一些标志构建plot命令:

# initial plot command which plots nothing, additional functions 
# can be appended with a comma
plot_command = "plot NaN notitle"

sin_flag = 1
cos_flag = 1

if (sin_flag == 1) {
   plot_command = plot_command.", sin(x)"
}  

if (cos_flag == 1) {
   plot_command = plot_command.", cos(x)"
}  

# print the final plot command (just for a check)
print plot_command

# execute the plot command
eval plot_command

创建一个空的绘图窗口

plot "-" ps 0 notitle
0 0
e
(或类似的)然后做你原来的计划,但用“replot”


一次使用plot有什么意义?你想让程序简短吗?我正在编写的实际脚本比我给出的简短示例要复杂得多,我不想为每个不同的标志重复plot命令。我看到的唯一解决方案是定义一个函数,该函数根据标志值决定打印什么。这个函数可以最大限度地减少在大代码中使用plot的次数好的,很好,这似乎符合我的目的。请注意,在创建初始空绘图时,只要指定了一个Y范围,就可以使用“绘图NaN”。我想您的解决方案的缺点是,在multiplot中使用“replot”可能会很烦人,而且对于输出矢量图形文件,我想replot最终可能会在一行上创建同一行的多个副本另一个。@Mead“multiplot”是的。那没办法。但你的后一点肯定不是真的。“replot”总是在重做以前的绘图之前清除画布上的所有内容。或者说,它创建了一个新的空平面,背景为白色,其中包括以前的多点打印输出)。
if(flagsin==1){replot sin(x)}
if(flagcos==1){replot cos(x)}