在两个文件之间执行数学运算后绘制数据

时间:2013-03-07 05:52:47

标签: plot gnuplot

我有

FileSFC1:包含某些数据
FileSFC2:包含一些其他数据

现在我需要做的是将FileSFC1的第二列与FileSFC2的第二列分开,然后绘制此结果。所以形式如下:

plot ( FileSFC1 using 1:1 / FileSFC2 using 1:1 ) * 100

所以基本上情节将是两个文件中列的百分比。请帮忙。

2 个答案:

答案 0 :(得分:17)

Gnuplot只能处理来自同一“文件”或数据流的数据列。你可以做的是使用plot '< bash command'构造。当plot的参数以<开头时,会发生什么,参数的其余部分被解释为bash命令,并且该命令的输出是绘制的。所以:

plot '< paste FileSFC1 FileSFC2' u (100*$2/$4)

这假设两个文件都有两列,并且您想要绘制每个文件中第二列的百分比。要对数据列执行操作,语法是将参数括在括号中的using和带有美元符号的列号前缀。

答案 1 :(得分:3)

Andyras的回答是你正在寻找的答案。

我只是想用这个结构添加它,你不能使用bash的进程替换<(,这是耻辱,因为在大多数情况下,你必须做额外的流进动(grepping或删除行等等。)

为此,您需要回答这个问题Gnuplot and Bash process-substitution,我将在此简要举例说明:

# Will concatenante FileSFC1 with the first 200 lines of FileSFC2
plot '< exec bash -c "paste <(cat FileSFC1) <(head -n 200 FileSFC2)"' u (100*$2/$4)