例如,给定以下数据文件(本例中为x ^ 2):
0
1
4
9
16
25
gnuplot可以绘制点以及点之间的差异,就好像它是:
0 0
1 1 # ( 1 - 0 = 1)
4 3 # ( 4 - 1 = 3)
9 5 # ( 9 - 4 = 5)
16 7 # (16 - 9 = 7)
25 9 # (25 -16 = 9)
实际文件不仅仅包含我感兴趣的列,如果可能的话,我想避免预处理以添加增量。
答案 0 :(得分:9)
dtop's solution对我不起作用,但这是有效的,纯粹是gnuplot(不是叫awk):
delta_v(x) = ( vD = x - old_v, old_v = x, vD)
old_v = NaN
set title "Compute Deltas"
set style data lines
plot 'data.dat' using 0:($1), '' using 0:(delta_v($1)) title 'Delta'
名为'data.dat'的示例数据文件:
0
1
4
9
16
25
答案 1 :(得分:6)
以下是如何在不进行预处理的情况下执行此操作:
gnuplot的脚本:
# runtime_delta.dem script
# run with
# gnuplot> load 'runtime_delta.dem'
#
reset
delta_v(x) = ( vD = x - old_v, old_v = x, vD)
old_v = NaN
set title "Compute Deltas"
set style data lines
plot 'runtime_delta.dat' using 0:(column('Data')), '' using 0:(delta_v(column('Data'))) title 'Delta'
示例数据文件'runtime_delta.dat':
Data
0
1
4
9
16
25
答案 2 :(得分:4)
使用awk怎么样?
plot "< awk '{print $1,$1-prev; prev=$1}' <datafilename>"
答案 3 :(得分:0)
以下是使用Gnuplot 5.1中的数组的版本。使用数组可以在单个Gnuplot实例中计算多个差异。
array Z[128]
do for [i=1:128] { Z[i] = NaN }
diff(i, x) = (y = x - Z[i], Z[i] = x, y)
i
是每次使用都需要增加的实例索引。例如
plot "file1.csv" using 1:(diff(1,$2)) using line, \
"file2.csv" using 1:(diff(2,$2)) using line