Gnuplot:对不同块中的数据进行操作

时间:2016-10-18 15:00:11

标签: gnuplot

我有一个由两个块组成的数据文件(由一个空白行分隔),并且想要绘制块1和块2中数据之间的差异,即类似

 plot 'a.dat' using 1:($2_1-$2_2)

其中$2_1应表示“来自块1的数据,col.2”和$2_2“来自块2的数据,col.2”。这可能在Gnuplot内,如果是这样,怎么样?

谢谢, 汤姆

1 个答案:

答案 0 :(得分:0)

此任务很可能不能直接在Gnuplot中使用,但是,可以先使用例如gawk对数据文件进行预处理,然后绘制修改后的文件。例如:

dataFile="a.dat"
plotCmd(fname)=sprintf("<gawk '\
    BEGIN{mode=0;l=0;} \
    mode==0{if(NF==0){mode=1;}else{x[NR]=$1;y[NR]=$2;}} \
    mode==1{if(NF>0){mode=2;l=NR;}} \
    mode==2{print $1,y[NR-l+1],$2}' %s", fname)

plot plotCmd(dataFile) u 1:($2-$3) w l

gawk脚本读取文件并将第一列和第二列保存到数组xy中,直到它到达空白行(零字段数)。然后它会跳过所有连续的空白行,直到它到达非空行(NF>0)。它记住输入文件中该行的位置,然后输出第二个块中每一行的x坐标以及来自第一个块的相应y坐标,即

等数据文件
1   2
2   4
3   6



1   4
2   8
3   12

将转化为

1   2   4
2   4   8
3   6   12

这假设两个块中的x坐标都匹配......