gnuplot 是否能够将 x 行汇总为单个数据点?

Is gnuplot able to summarize x rows as a single data point?

问题是我是否可以轻松更改 gnuplot 中数据的分辨率。

假设我有一个包含 x 和 y1、y2、...、yN 值的 N+1 列文件。 X 个数据点的分辨率为一分钟。

我喜欢做的是设置一个参数(比如 5),现在 gnuplot 从所有 y 列的前 5 行计算数据点,然后是后五行,依此类推(意味着:取第一个 x 值并且对于每个 y 列将它们相加得到 5 行间隔除以 5)。

这是否可以在不更改数据文件本身的情况下实现?也许已经存在这样的功能?或者您认为这是一种更优雅的操作数据文件的方式?

感谢您的想法。

是的,这是可能的。然而,在一般情况下它有点复杂,因此您可能更愿意在将数据传递给 gnuplot 之前在单独的预处理步骤中进行平均。

首先请注意,您可以创建一个过滤器,通过使用伪列 0(行号)和“非数字”标志 NaN 接受并绘制每第 N 个点。 +1 是因为行号从零开始。

filter(y) = ((int(column(0)+1)%N == 0) ? y : NaN)
plot DATA using 1:(filter(column(2)))

现在我们通过向两个结果路径中的每一个添加串行评估运算符来使过滤器更加复杂。串行计算保证以逗号分隔的表达式按从左到右的顺序计算,净值设置为最右边表达式的值。

sum_and_filter(y) = (int(column(0)+1)%N == 0) ? (out=(sum+y)/N, sum=0, out) : (sum=sum+y, NaN)
sum = 0
plot DATA using 1:(sum_and_filter(column(2)))

这是显示原始数据和过滤输出的图表

N = 5
sum = 0
plot DATA using 1:2 with linespoints pt 1, \
     DATA using 1:(sum_and_filter(column(2))) with points pt 7

在 x 值等距的特殊情况下,自 gnuplot 版本 5.2.something 以来提供了一个更简单的选项。关键字 bins 会为您做累积。不管怎样,它都会绘制总和而不是 bin 内容的平均值,因此您需要 x 间距的先验知识才能计算平均值。在这里,我将 bin 选项添加到上一个图中。请注意,它根本没有使用过滤功能。

set style fill transparent solid 0.25
plot DATA using 1:2 with linespoints pt 1, \
     DATA using 1:(sum_and_filter(column(2))) with points pt 7, \
     DATA using 1:(/5) bins binwidth=50 with boxes title "bin width 50"

区间以相应的 x 值范围为中心绘制。您可能希望通过包含一个偏移量来调整它:plot DATA using (-offset):(/5).