【问题标题】:How do you sum every nth column of data in gnuplot?你如何对 gnuplot 中的每 n 列数据求和?
【发布时间】:2020-03-13 02:34:33
【问题描述】:

我想对 Gnuplot 中数据集的几列取平均值。问题是我想平均每隔一列(从我的数据集的第二列开始)。我正在考虑以某种方式使用every,但我仍然不明白何时何地使用every。为了帮助可视化我的问题:我的数据看起来像这样:

x  y1  z1  y2  z2
2  0.6  0  0.6  0
1  0.7  0  0.7  1
1  0.8  2  0.8  1
1  0.9  0  0.9  0

我想平均 y1 和 y2 并通过以下方式绘制结果:

stats filename nooutput
plot filename u 1:sum[col = every :2::2::STATS_columns] / ((STATS_columns-1)/2)

不确定这是否接近可行。此外,最好有一种方法来查找使用的列数,而无需事先了解数据的外观。在示例中,我利用我对数据的了解知道平均值超过了 ((STATS_columns-1)/2) 个点数。

感谢您的回复

【问题讨论】:

    标签: gnuplot average data-processing


    【解决方案1】:

    根据您的代码,我假设您希望对每行的 y1 和 y2 进行平均,然后将其与 x(第 1 列)进行比较。由于您有几个相同的 x 值,因此会有另一个平均值,即列和所有相同 x 值的平均值。 我修改了您的数据以更好地说明差异。 我猜你问的是红色圆圈。蓝色三角形基本上是平均值的平均值,即红色点的平均值。 检查help summationhelp smoothsum 与索引没有步长。 来自 gnuplot 帮助:

    sum [<var> = <start> : <end>] <expression>
    

    代码:

    ### average over columns and smooth
    reset session
    
    $Data <<EOD
    #x  y1  z1  y2  z2
    1  2.0  0  4.0  0
    1  2.2  0  4.2  1
    1  2.9  2  4.9  1
    2  2.1  0  4.1  0
    2  2.3  0  4.3  0
    2  2.8  0  4.8  0
    3  2.2  0  4.2  0
    3  2.3  0  4.3  0
    3  2.7  0  4.7  0
    EOD
    
    stats $Data nooutput
    set offsets 0.5,0.5,0.5,0.5
    
    Count = (STATS_columns-1)/2
    plot $Data u 1:((sum[i=1:Count] column(i*2))/Count) w p pt 7 lc rgb "red" ti "average over y1,y2 columns for each row",\
         $Data u 1:((sum[i=1:Count] column(i*2))/Count) smooth unique w p pt 9 lc rgb "blue" ti "average over y1,y2 for each x"
    ### end of code
    

    结果:

    【讨论】:

    • 太棒了!谢谢你的帮助。我在网上查看了 sum 帮助,但并没有真正了解如何正确使用它,尤其是对于这样的情况。顺便说一句,x 值是偶然出现的……我的 x 值以恒定的步长递增。不过,第二个平均值仍然很有用。谢谢!
    • 我做了,但我的投票没有记录,因为我的声誉仍然太低。
    • 刚刚意识到我也可以单击对勾将其标记为有用。就这么做了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多