考虑以下形式的数据集:
1 3
1 10
2 7
2 14
3 9
我想要一个只绘制3点(1,3 + 10),(2,7 + 14),(3,9)的gnuplot脚本?问题与Gnuplot Cumulative Column Question类似,但这并没有真正解决我的特定问题。
答案 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值求和。