Gnuplot堆积来自各种索引的Filledcurves

时间:2016-03-21 09:55:09

标签: gnuplot

我有一个文件,我的数据被分成几个索引。我想通过将选定的先前索引的值添加到当前索引的值来将索引的部分或全部绘制为堆叠的填充曲线。我找不到使用sum函数的方法,就像在单个索引中排列为列的数据一样(如在this question中),即使使用伪列(-2)作为索引号。

重要提示:每个索引都是严格相同的x值集,只有y值不同。

有没有办法做类似

的事情
p 'data.dat' index (sum(ind=1,3,4,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,3,4,5)', '' index (sum(ind=1,2,5) ind) u 1:2 w filledcurve x1 t 'Sum(1,2,5)'
在gnuplot中还是我必须求助于一个脚本(可能是this answer中的脚本的变体)?

2 个答案:

答案 0 :(得分:0)

虽然您可以使用gnuplot 4.4+的函数和变量来完成它,但这不是非常有效,因为您希望在文件中的几个远程行上执行操作,这实际上是对数组的操作。 Gnuplot不适用于此,数据文件应该具有与您想要绘制的结构相当接近的结构。我建议您尝试生成具有这种结构的文件,例如将您想要在不同列中的同一行上求和的值。

答案 1 :(得分:0)

你可以在gnuplot之外的一些帮助下执行此操作(在gnuplot中调用)。想象一下,你有以下4个索引(0到3)的数据文件:

1 2
2 3


1 5
2 5


1 0
2 3


1 4
2 3

现在说我们想要将1和2以及0和3相加。第一个总和应该返回:

1 5
2 8

而第二笔应该返回

1 6
2 6

我们可以使用set table选择我们想要的块:

set table "sum1"
plot for [i in "1 2"] "data3" index 0+i pt 7 not

set table "sum2"
plot for [i in "0 3"] "data3" index 0+i pt 7 not
unset table

现在使用sed管道删除空行,smooth freq使用相等的x值求和:

plot "< sed '/^\s*$/d' sum1" smooth freq t "sum1", \
     "< sed '/^\s*$/d' sum2" smooth freq t "sum2"

enter image description here