我已经使用gnuplot绘制了直方图,但是以某种方式未将其标准化为1,而是将其标准化为其他值。
我正在使用的gnuplot代码:
n=50
min=0.82166501
max=1.66893753
width=(max-min)/50
hist(x,width)=width*floor(x/width)
plot 'CHbl.dat' u (hist($1,width)):(1.0/(2880144*width)) smooth freq w lines lc rgb"red" title "CH"
在这里2880144是我的数据点数。 我得到的输出直方图:
为什么会这样?我应该如何将其标准化为1?
答案 0 :(得分:2)
有几种缩放直方图的方法。 让我们获取一些随机数据。您可以将数据放入x-bin和
a)汇总箱中的所有y值。那是... :2 smooth frequency
b)汇总箱中的所有y值,并对其进行缩放以使面积为1
。那是... :2 smooth fnormal
c)计算垃圾箱中的发生次数。那是... :(1) smooth frequency
d)将bin中的所有y值相加,然后按峰对其进行归一化。那是...:($2/STATS_max)
正如伊桑(Ethan)所说,归一化通常针对area = 1,即b)。 您是要d)吗?
代码:
### Normalized histograms
reset session
set key top left
set samples 10000
set table $Data
plot [-5:5][-5:5]'+' u (invnorm(rand(0))):(rand(0)) w table
unset table
min = -5
max = 5
width = (max-min)/50.
bin(x) = width*floor(x/width)
set multiplot layout 2,2
plot $Data u (bin($1)):2 smooth frequency w boxes lc rgb "red" title "smooth frequency"
plot $Data u (bin($1)):2 smooth fnormal w boxes lc rgb "web-green" t "smooth fnormal"
plot $Data u (bin($1)):(1) smooth frequency w boxes lc rgb "web-blue" t "occurrences per bin"
set table $FindMax
plot $Data u (bin($1)):2 smooth frequency
unset table
stats $FindMax u 2 nooutput
plot $Data u (bin($1)):($2/STATS_max) smooth frequency w boxes lc rgb "magenta" t "normalized max to 1"
unset multiplot
### end of code
结果: