2014-10-17 68 views
1

考虑数据集的形式如下:绘制X与总和(y)的

1 3 
1 10 
2 7 
2 14 
3 9 

我想要一个gnuplot的脚本,该脚本积只有3分(1,3 + 10),(2,7 + 14) ,(3,9)?问题与Gnuplot Cumulative Column Question类似,但这并不能真正解决我的特殊问题。

+0

空行是故意的吗?如果不是,您应该从样本数据中删除它们。 – 2014-10-17 22:57:41

+0

@Marcus:我删除了空行。 – Tushar 2014-10-17 23:01:09

+0

确认后,我重新格式化了您的问题,以使用突出显示输入数据的不同方式。 – 2014-10-17 23:03:13

回答

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   
} 

附录

如果万一你的输入文件没有按照分类第E 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 
+0

谢谢你这个作品!但是,它只有在所有相同的x值连续时才有效。我认为在一般情况下,也必须有一种复杂的方式来实现它。 – Tushar 2014-10-17 23:15:32

1

的Gnuplot有一些平滑的选择。其中之一是smooth frequency正是你想要什么呢:

plot 'data.txt' smooth frequency w l 

它首先呈现在X单调的数据,然后总结了所有的y值相同的x值。

+0

+1:生活可以如此简单。 :-) – 2014-10-18 08:24:50