【问题标题】:gnuplot generate plot command with sprintf?gnuplot 用 sprintf 生成绘图命令?
【发布时间】:2014-01-25 20:25:27
【问题描述】:

我想以编程方式生成一个 gnuplot 绘图命令,例如:

plotline = sprintf("'datafile1.dat' using %d:3 with points, '%s' using %d:3 with points",i,targfile,i)
plot plotline

第二行中的“情节线”被扩展以生成并执行完整的命令,例如:

plot 'datafile1.dat' using 8:3 with points, 'datafile2.dat' using 8:3 with points

我想这样做是为了在终端中回显“plotline”,因此可以确定在 gnuplot 脚本中循环遍历一组列/数据文件/任何内容时所显示的确切内容。

是否有/执行此操作的语法是什么,或者您能否建议另一种方法来报告已执行的绘图命令(无需拆分为绘图命令和一组单独的命令来报告当前变量状态)。

谢谢!

【问题讨论】:

标签: gnuplot


【解决方案1】:

为了从一些字符串构造这样的绘图命令,您可以使用eval 来执行包含在字符串中的命令:

plotline = 'x title "mytitle"'
eval('plot '.plotline)

您也可以使用set macros:

set macros
plotline = 'x title "mytitle"'
plot @plotline

这会将@plotline 替换为字符串变量plotline 的内容在执行命令之前。使用plot plotline 会将plotline 的内容解释为文件名。请注意,从 4.6 版开始,宏不能在循环中正常工作,但 eval 工作正常。

顺便说一句:如果您不指定自己的标题,那么实际的情节陈述会写在情节图例中。但这不能写入终端输出。

【讨论】:

  • 谢谢!无法让 'set macros ... @plotline' 为我工作,因为 sprintf 中的 plotline 不是字符串变量,但是 eval() 完全符合我的要求。
  • 这很奇怪。对我来说,在 4.6.3 中,以下两个语句都可以正常工作:set macros; plotline = sprintf("%f*x", 4); plot @plotlineset macros; plotline = sprintf("'%s' using 0:1", 'test.txt'); plot @plotline(当然前提是你有这样的文件 test.txt
  • 我要补充一点,当前 4.6 版本的 for 循环中的宏不能按预期工作,因此首选 eval 版本。
  • @Andreas 感谢您的评论,我把eval 部分放在最前面,并添加了与宏和循环相关的注释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多