绘制x与总和(y)

时间:2014-10-17 20:04:52

标签: gnuplot

考虑以下形式的数据集:

1   3
1   10
2   7
2   14
3   9

我想要一个只绘制3点(1,3 + 10),(2,7 + 14),(3,9)的gnuplot脚本?问题与Gnuplot Cumulative Column Question类似,但这并没有真正解决我的特定问题。

2 个答案:

答案 0 :(得分:1)

实际上,您提到的链接为您提供了一个很好的提示:您可以使用AWK预处理数据,然后将其传输到gnuplot。

以下行应该为您提供所需(假设您的数据位于文件in.txt中):

plot "<awk '{ if ($1 == last_x) sum_y += $2 ; else { print last_x, sum_y; sum_y = $2 } last_x=$1} END { print last_x, sum_y }' in.txt" with lines

当然,内联使得AWK脚本不可读,所以为了清楚起见,我在这里重复一遍:

{
    if ($1 == last_x)
        sum_y += $2
    else {
        print last_x, sum_y
        sum_y = $2
    }
    last_x=$1
}
END { 
    print last_x, sum_y        
}

<强>附录

如果您的输入文件未根据X坐标排序,则可以增强管道以包含对sort的调用:

plot "< sort -n -k 1 in.txt | awk '{ if ($1 == last_x) sum_y += $2 ; else { print last_x, sum_y; sum_y = $2 } last_x=$1} END { print last_x, sum_y }'" with lines

答案 1 :(得分:1)

Gnuplot有一些平滑选项。其中之一是smooth frequency你究竟想要什么:

plot 'data.txt' smooth frequency w l

它首先在x中呈现单调数据,然后对相同x值的所有y值求和。