4

介绍

在 gnuplot 中,有一个解决方案可以从名为hist.datwhat likes的文件创建直方图

1
2
2
2
3

通过使用命令

binwidth=1
set boxwidth binwidth
bin(x,width)=width*floor(x/width) + binwidth/2.0
plot [0:5][0:*] "hist.dat" u (bin($1,binwidth)):(1.0) smooth freq with boxes

从其他 SO 页面生成这样的直方图。

问题

我怎样才能使我的函数适合这个直方图?我定义了一个高斯函数并初始化了它的值

f(x) = a*exp(-((x-m)/s)**2)
a=3; m=2.5; s=1

在输出中,函数很好地遵循直方图。

不幸的是,我无法使用命令适应此直方图

fit f(x) "hist.dat" u (bin($1,binwidth)):(1.0) smooth freq via a,m,s  
                                                      ^
         Need via and either parameter list or file

那么如何在不创建包含分箱值的新文件的情况下适应我的函数呢?

4

2 回答 2

4

我面临着类似的问题,我发现了一种不太优雅的解决方案。

binwidth=1
set boxwidth binwidth
bin(x,width)=width*floor(x/width) + binwidth/2.0
set table 'hist.temp'
plot [0:5][0:*] "hist.dat" u (bin($1,binwidth)):(1.0) smooth freq with boxes
unset table

然后您可以根据自己的喜好调整文件。我知道可能有一些更好的方法可以做到这一点,但对我来说,这是一个快速且有效的解决方案。我希望这对你有帮助。

干杯!

于 2013-03-14T10:38:53.293 回答
1

我使用了它并且它有效:

gauss(x)=a/(sqrt(2*pi)sigma)*exp(-(x-mean)**2/(2*sigma**2))

fit gauss(x) 'data.txt' via a,sigma,mean

经过 83 次迭代后,GNUplot 计算出我的 a、sigma 和均值

于 2014-04-26T05:16:07.973 回答