Gnuplot累积列问题

Gnuplot累积列问题,plot,gnuplot,Plot,Gnuplot,我有一些数据 #Time Distance 1 3 2 5 4 9 8 11 12 17 14 20 16 34 20 40 我想在gnuplot中绘制累积距离wrt time。。。(应该很容易)但我不知道怎么做 x我对Gnuplot有一点经验,我只是仔细阅读了一些文档。不幸的是,我无法找到一个解决方案来生成您正在绘制的累积和 我认为您需要做的是在让Gnuplot处理数据之前,用另一个程序对数据进行处理。是我想到的一个程序,它实际上是为处理列数据而构建的。您可以

我有一些数据

#Time  Distance
 1   3
 2   5
 4   9
 8  11
12  17
14  20
16  34
20  40
我想在gnuplot中绘制累积距离wrt time。。。(应该很容易)但我不知道怎么做


x

我对Gnuplot有一点经验,我只是仔细阅读了一些文档。不幸的是,我无法找到一个解决方案来生成您正在绘制的累积和


我认为您需要做的是在让Gnuplot处理数据之前,用另一个程序对数据进行处理。是我想到的一个程序,它实际上是为处理列数据而构建的。您可以通过以下方式将此过程集成到绘图过程中。

假设您的数据位于文件“test.txt”中,那么:

plot "<awk '{i=i+$2; print $1,i}' test.txt" with lines

plot”同样可以通过“平滑”选项的“累积”变量实现(只需在gnuplot中输入
help smooth

对于仍在寻找此类内容的任何人,如果您的gnuplot版本为4.4或更高版本,您可以执行以下操作:

a=0
#gnuplot 4.4+ functions are now defined as:  
#func(variable1,variable2...)=(statement1,statement2,...,return value)
cumulative_sum(x)=(a=a+x,a)
plot "test.dat" using 1:(cumulative_sum($2))

如果数据位于文件datafile中,则可以进行如下累积绘图:

$ gnuplot
gnuplot> plot "datafile" smooth cumulative

这不是问题所要寻找的,但是“gnuplot累积分布函数”总是把我带到这里,除非您已经拥有gnuplot期望的数据,否则没有一个答案是完全正确的

但是,假设您想要的是一个仅为距离的累积分布函数,并且只有原始距离。gnuplot可以使用一个小技巧来计算
y
值:

test.dat

#Time  Distance
 1   3
 2   5
 4   9
 8  11
12  17
14  20
16  34
20  40
plot.gpi

datafile = test.dat
stats datafile
plot datafile using 2:(1./STATS_records) smooth cumulative title "distance"


但是,它并不像拥有所有数据那样灵活。

Hmm…列被HTML化了…好的…请将每一行对视为一对列…xOkay有人修复了它…啊,成为一个如此愚蠢的人的乐趣。@Xofo,只需在每行前添加4个空格,字符的间距均匀。有更多的解决方案,但这是有效的;-)。和欢迎使用SO。@Carl,很抱歉我无意中实现了您的答案!我希望SO在“发布新答案”消息时能快一点。不要抱歉,我很荣幸我的建议对您有效!祝您黑客愉快。我发现如果您有浮点对,这不会完全有效。我得到的错误是:awk:(FILENAME=out.txt FNR=131)致命:打印到“标准输出”失败(管道破裂)^第1行的数据不正确---嗯,我刚刚用浮点数试过,它对我有效。你的第1行是什么?是标题吗?试着删除它。我正在运行gnuplot 4.4 patchlevel 2,你的脚本会导致一个
未定义的变量:一个
错误。@Thomas--你确定记得第2行的
a=0
吗e top?噢,我不敢相信我没有看到。它工作正常。谢谢,伙计,现在我觉得很愚蠢。:-)如果你想一次绘制多个计算数据集,这不起作用。此外,你需要在每次运行后将a重置为零(如果你使用的是交互式gnuplot提示符,至少)。对我来说,
平滑累积
解决方案效果更好。这是一个很好的解决方案,因为它可以推广。有时你需要有尾部分布。现在可以很容易地使用这些线
a=max;tailDF(x)=(a=a-x,a)
。我看不出如何使用平滑累积
实现同样的效果。