如何在 gnuplot 中使用子字符串

col*_*ids 4 substring gnuplot

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

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
...
Run Code Online (Sandbox Code Playgroud)

我想绘制括号之间的数字,(x,y)类似于:yx

plot "data.dat" u substr(($2),7,8 ):substr(($2),10,11)
Run Code Online (Sandbox Code Playgroud)

正确的语法是什么?

Chr*_*oph 5

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

但是,在您的情况下,有一个 hack 可以按照以下步骤使其与 gnuplot 一起使用:

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

    对于x- 值,这将是

    substr(s, strstrt(s, "(")+1, strstrt(s, ",")-1)
    
    Run Code Online (Sandbox Code Playgroud)
  • 添加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
Run Code Online (Sandbox Code Playgroud)