gnuplot 如何给列号动态绘制?

gnuplot how to give column number to plot dynamically?

我正在使用 gnuplot 自动执行创建小图的任务。我需要从要绘制的数据文件中传递列号

pfile=system("echo $file")
colnum=system("echo $colnum")

plot pfile using 4:(column(colnum)) title "slot1"
                     ^^^^^^^^^^^^

colnum 之前导出为 export colnum=2

我在突出显示的部分遇到错误。我尝试通过系统命令使用 export/fetch,但它也不起作用 例如我尝试了 4:colnum,得到了类似的错误

"./12.gnuplot.helper.pg", line 29: warning: Skipping data file with no valid points    
plot pfile using 4:(column(colnum)) title "slot1"   
                                                ^   
"./12.gnuplot.helper.pg", line 29: x range is invalid

似乎必须做 colnum=int(system("echo $colnum")) 以便变量 colnum 被解释为整数而不是字符串

您也可以通过命令行传递列号

gnuplot -e "colnum=$colnum" script.gp

并且您的 script.gp 包含

plot pfile using 4:(column(colnum))

这是@EWCZ 回答的替代方法。使用 system 命令初始化的任何变量都被视为字符串:在您的情况下, colnum="2" (带引号)。您可以通过添加零将其转换为整数:

# first option
plot pfile using 4:(column(colnum+0))

# second option
colnum = system("echo $colnum") + 0
plot pfile using 4:(column(colnum))

附带说明一下,通过使用@Christoph 的回答,您的任务可以更灵活(更容易自动化);如果你有 gnuplot 5.0 就更好了,因为你可以 pass arguments to a gnuplot script directly