考虑数据集的形式如下:绘制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类似,但这并不能真正解决我的特殊问题。
考虑数据集的形式如下:绘制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类似,但这并不能真正解决我的特殊问题。
实际上,您提到的链接为您提供了一个很好的提示:您可以使用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
谢谢你这个作品!但是,它只有在所有相同的x值连续时才有效。我认为在一般情况下,也必须有一种复杂的方式来实现它。 – Tushar 2014-10-17 23:15:32
的Gnuplot有一些平滑的选择。其中之一是smooth frequency
正是你想要什么呢:
plot 'data.txt' smooth frequency w l
它首先呈现在X单调的数据,然后总结了所有的y值相同的x值。
+1:生活可以如此简单。 :-) – 2014-10-18 08:24:50
空行是故意的吗?如果不是,您应该从样本数据中删除它们。 – 2014-10-17 22:57:41
@Marcus:我删除了空行。 – Tushar 2014-10-17 23:01:09
确认后,我重新格式化了您的问题,以使用突出显示输入数据的不同方式。 – 2014-10-17 23:03:13