Gnuplot 绘制x与总和(y)

Gnuplot 绘制x与总和(y),gnuplot,Gnuplot,考虑以下形式的数据集: 1 3 1 10 2 7 2 14 3 9 我想要一个只绘制3个点(1,3+10),(2,7+14),(3,9)的gnuplot脚本?这个问题与类似,但这并不能真正解决我的特殊问题。实际上,您提到的链接给了您一个很好的提示:您可以使用AWK预处理数据,然后将其导入gnuplot 下一行应该提供您所需的内容(假设您的数据位于.txt中的文件): 附录 如果您的输入文件没有按照X坐标排序,您可以增强管道以包括对排序的调用: plot "< sort

考虑以下形式的数据集:

1   3
1   10
2   7
2   14
3   9

我想要一个只绘制3个点(1,3+10),(2,7+14),(3,9)的gnuplot脚本?这个问题与类似,但这并不能真正解决我的特殊问题。

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

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

附录

如果您的输入文件没有按照X坐标排序,您可以增强管道以包括对
排序的调用

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
plot“
Gnuplot有一些平滑选项。其中之一是
平滑频率
什么正是您想要的:

plot 'data.txt' smooth frequency w l

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

空行是故意的吗?如果没有,您应该从示例数据中删除它们。@Marcus:我删除了空行。在您确认后,我重新格式化了您的问题,以使用不同的方式突出显示输入数据。谢谢您,这很有效!但是,它仅在所有相同的x值连续时才起作用。我想在一般情况下也有一个复杂的实现方法。
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
plot 'data.txt' smooth frequency w l