graph - 在 gnuplot 中绘制第 n 行的平均值

标签 graph gnuplot average confidence-interval

我有一些数据想要用 gnuplot 绘制它们。但对于相同的 x 值,我有许多 y 值,我将向您展示如何更好地理解:

0 0.650765 0.122225 0.013325 
0 0.522575 0.001447 0.010718 
0 0.576791 0.004277 0.104052 
0 0.512327 0.002268 0.005430 
0 0.530401 0.000000 0.036541 
0 0.518333 0.001128 0.017270
20 0.512864 0.001111 0.005433 
20 0.510357 0.005312 0.000000 
20 0.526809 0.001089 0.033523 
20 0.527076 0.000000 0.034215 
20 0.507166 0.001131 0.000000 
20 0.513868 0.001306 0.004344 
40 0.531742 0.003295 0.0365

在这个例子中,每个 x 值有 6 个值。那么如何绘制平均值和置信度条(区间)??

感谢帮助

最佳答案

为此,您将需要某种外部处理。一种可能性是使用 gawk 来计算所需的数量,并将此辅助输出提供给 Gnuplot 来绘制它。例如:

set terminal png enhanced
set output 'test.png'

fName = 'data.dat'
plotCmd(col_num)=sprintf('< gawk -f analyze.awk -v col_num=%d %s', col_num, fName)

set format y '%0.2f'
set xr [-5:25]

plot \
    plotCmd(2) u 1:2:3:4 w yerrorbars pt 3 lc rgb 'dark-red' t 'column 2'

这假设脚本 analyze.awk 驻留在启动 Gnuplot 的同一目录中(否则,需要修改 -f 中的路径gawk 的选项。脚本 analyze.awk 本身的内容如下:

function analyze(x, data){
    n = 0;mean = 0;
    val_min = 0;val_max = 0;

    for(val in data){
        n += 1;
        delta = val - mean;
        mean += delta/n;
        val_min = (n == 1)?val:((val < val_min)?val:val_min);
        val_max = (n == 1)?val:((val > val_max)?val:val_max);
    }
    if(n > 0){
        print x, mean, val_min, val_max;
    }
}

{
    curr = $1;
    yval = $(col_num);

    if(NR==1 || prev != curr){
        analyze(prev, data);
        delete data;
        prev = curr;
    }
    data[yval] = 1;
}

END{
    analyze(curr, data);
}

它直接实现了online algorithm计算平均值,并为 x 的每个不同值打印该平均值以及最小/最大值。

在 Gnuplot 脚本中,感兴趣的列随后被传递到 plotCmd 函数,该函数准备要执行的命令,并使用 u 1:2 绘制其输出: 3:4 w yerrorbars。此语法意味着置信区间存储在第三/第四列中,而值本身(平均值)驻留在第二列中。

总的来说,上面的两个脚本生成了下面的图片。最后一点的置信区间不可见,因为问题中的示例数据仅包含 x=40 的一条记录,因此最小/最大值与平均值一致。

enter image description here

关于graph - 在 gnuplot 中绘制第 n 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677017/

相关文章:

gnuplot - 使用带有点的可变颜色

d3.js - 防止 D3 在更新时添加重复项

algorithm - 以最少的时间访问图中的 N 条特殊边

gnuplot - 如果 y 列的线条样式更改,则多图中的网格线也会更改

mysql - SQL-如何仅使用最后 N 行中的值查找列的平均值

Python - 当年 3 个月移动平均线

R:计算不规则的1分钟时间序列中的1小时平均值

algorithm - 从图形中获取主线

python - pyplot.savefig 与空导出

graph - 在gnuplot中绘制x函数的阶乘?