我有一个由两个块组成的数据文件(由一个空白行分隔),并且想要绘制块1和块2中数据之间的差异,即类似
plot 'a.dat' using 1:($2_1-$2_2)
其中$2_1
应表示“来自块1的数据,col.2”和$2_2
“来自块2的数据,col.2”。这可能在Gnuplot内,如果是这样,怎么样?
谢谢, 汤姆
答案 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脚本读取文件并将第一列和第二列保存到数组x
和y
中,直到它到达空白行(零字段数)。然后它会跳过所有连续的空白行,直到它到达非空行(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坐标都匹配......