我想使用列中的子字符串绘制数据文件。我的数据文件包含格式为
的数据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)
之间的数字绘制为y
与x
之间的数字,如:
plot "data.dat" u substr(($2),7,8 ):substr(($2),10,11)
这个的正确语法是什么?
答案 0 :(得分:3)
使用gnuplot正确执行此操作有点棘手,因为gnuplot不允许指定任意格式作为输入。通常,最好的方法是使用外部工具为您提取数据并将生成的文件提供给gnuplot(这也可以使用语法(plot '< script data.dat'...
)即时完成。
然而,在你的情况下,在接下来的步骤之后有一个hack让它使用gnuplot:
set datafile separator ':'
将x
和y
的信息放在一列中。使用strstrt
确定x
和y
值的起始和结束字符串位置。
对于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