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

gnuplot是否能够将x行汇总为单个数据点?,gnuplot,Gnuplot,问题是我是否可以轻松地更改gnuplot中数据的分辨率 假设我有一个N+1列文件,包含x和y1,y2,yN值。 X个数据点的分辨率为一分钟 我喜欢做的是设置一个参数(比如5),现在gnuplot计算所有y列的前5行中的一个数据点,然后是第二个5行,依此类推(意味着:取第一个x值,对每个y列求和,以5行间隔除以5) 在不更改数据文件本身的情况下,这是否可行?也许已经存在这样一个特征了?或者您认为这是一种更优雅的数据文件操作方式吗 谢谢你的想法。是的,这是可能的。然而,在一般情况下它有点复杂,因此您

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

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

我喜欢做的是设置一个参数(比如5),现在gnuplot计算所有y列的前5行中的一个数据点,然后是第二个5行,依此类推(意味着:取第一个x值,对每个y列求和,以5行间隔除以5)

在不更改数据文件本身的情况下,这是否可行?也许已经存在这样一个特征了?或者您认为这是一种更优雅的数据文件操作方式吗


谢谢你的想法。

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

首先请注意,您可以创建一个过滤器,通过使用伪列0(行号)和“not a number”标志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.0以来,有一个更简单的选项可用。关键字
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:($2/5) bins binwidth=50 with boxes title "bin width 50"


将围绕相应的x值范围居中绘制容器。您可能希望通过使用($1-offset):($2/5)包括偏移量:
打印数据来调整此设置。
是的,这是可能的。然而,在一般情况下它有点复杂,因此您可能更愿意在将数据传递给gnuplot之前在单独的预处理步骤中进行平均

首先请注意,您可以创建一个过滤器,通过使用伪列0(行号)和“not a number”标志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.0以来,有一个更简单的选项可用。关键字
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:($2/5) bins binwidth=50 with boxes title "bin width 50"


将围绕相应的x值范围居中绘制容器。您可能希望通过包括偏移量来调整此值:
使用($1-offset):($2/5)打印数据

N有多大?只有2,3或5或20,50100?x间隔是规则的还是不规则的?@theozh N=13,x间隔是不规则的?我可以根据自己的需要操作数据文件,但我想知道gnuplot的功能是否更高效或更易于使用。因此,问题要宽泛一点。谢谢!N有多大?只有2,3或5或20,50100?x间隔是规则的还是不规则的?@theozh N=13,x间隔是不规则的?我可以根据自己的需要操作数据文件,但我想知道gnuplot的功能是否更高效或更易于使用。因此,问题要宽泛一点。谢谢!这看起来很有希望,两种方法对我来说都是新的。非常感谢您花时间以如此友好和清晰的方式回答问题。我只需要看看如何处理不规则的x轴数据点,这在我的问题中没有提到;)这看起来很有希望,两种方法对我来说都是新的。非常感谢您花时间以如此友好和清晰的方式回答问题。我只需要看看如何处理不规则的x轴数据点,这在我的问题中没有提到;)