如何在gnuplot中使用子串

时间:2015-05-30 20:40:23

标签: gnuplot substring

我想使用列中的子字符串绘制数据文件。我的数据文件包含格式为

的数据
1 (15, 3): dX: -1.619, dY: 3.315, dXSc: 0.981, dYSc: 0.993
2 ( 4,16): dX: -0.540, dY: -0.540, dXSc: 0.992, dYSc: 0.977
...

并且我想将括号(x,y)之间的数字绘制为yx之间的数字,如:

plot "data.dat" u substr(($2),7,8 ):substr(($2),10,11)

这个的正确语法是什么?

1 个答案:

答案 0 :(得分:3)

使用gnuplot正确执行此操作有点棘手,因为gnuplot不允许指定任意格式作为输入。通常,最好的方法是使用外部工具为您提取数据并将生成的文件提供给gnuplot(这也可以使用语法(plot '< script data.dat'...)即时完成。

然而,在你的情况下,在接下来的步骤之后有一个hack让它使用gnuplot:

  • 使用set datafile separator ':'xy的信息放在一列中。
  • 使用strstrt确定xy值的起始和结束字符串位置。

    对于x - 值,这将是

    substr(s, strstrt(s, "(")+1, strstrt(s, ",")-1)
    
  • 0.0添加到生成的子字符串中,以便将它们隐含地转换为实际值。

适用于您的示例数据的完整脚本是

set datafile separator ":"
get_x(c) = 0.0 + substr(strcol(c), strstrt(strcol(c), "(") + 1, strstrt(strcol(c), ",") - 1)
get_y(c) = 0.0 + substr(strcol(c), strstrt(strcol(c), ",") + 1, strstrt(strcol(c), ")") - 1)

plot 'data.dat' using (get_x(1)):(get_y(1)) with points pt 7 ps 2