2014-10-30 68 views
1

我的最后一个问题也回答了(谢谢@ Christoph!),我还有另一个问题。Gnuplot:减去多个数据文件的偏移

我有多个数据文件,我想绘制,但在每个文件我想在0

我有下面的代码在第2列的第一个值,以便每个数据文件开始。减去:

file = 'file_1 file_2 file_3 ... filen' 

intime(COL) = strptime("%H:%M:%S",strcol(COL)) 

do for [i=1:words(file)] { 
     stats word(file,i) using (intime(2)):3 nooutput 
     timemin(i) = STATS_min_x 
} 

plot for [i=1:words(file)] word(file,i) u (intime(2)-timemin(i)):3 notitle 

问题是变量timemin(i)只包含最后一个文件的值。

有谁知道我可以如何将file_1的所有不同值保存到file_n?

感谢您的帮助!

回答

1

您可以构造一个包含所有计算极小的字符串:

file = 'file_1 file_2 file_3 ... filen' 
timemin = '' 
intime(COL) = strptime("%H:%M:%S",strcol(COL)) 

do for [i=1:words(file)] { 
     stats word(file,i) using (intime(2)):3 nooutput 
     timemin = sprintf("%s %e", timemin, STATS_min_x) 
} 

plot for [i=1:words(file)] word(file,i) u (intime(2)-word(timemin, i)):3 notitle 

既然要减去第一个值,你也可以使用另一种方法不stats

file = 'file_1 file_2 file_3 ... filen' 
intime(COL) = strptime("%H:%M:%S",strcol(COL)) 

ofs = 0 
plot for [f in file] f using (ofs = ($0 == 0 ? intime(2) : ofs), intime(2) - ofs):3 notitle 

这将变量设置为每个数据文件中第2列的第一个值($0包含行号)。请注意,您可以使用in迭代单词列表。

+0

再次感谢!我试过这个,但是出现这个错误:'f_sprintf:试图用字符串格式打印数字值。所以我将'%s%e'改为'%f'。在for循环之外,只存储'timemin'的最后一个值。所以我有和bevore一样的问题。 – Froop 2014-10-30 10:12:57

+0

我纠正了sprintf调用。 – Christoph 2014-10-30 10:34:28

+0

是的,知道它是完美的!非常感谢! – Froop 2014-10-30 10:38:03