[英]combine histograms in gnuplot (weighted average of bin counts)
假设我有两个数量相同的数据,每个数据都有错误。 特别是我在gnuplot文件中有两个直方图,其格式大致为直方图A的xA yA dyA
xB yB dyB
直方图B的xB yB dyB
(xA和xB值相同)
为了提高直方图的精度,我可以“合并它们”以获得更好的y估计值。 在实践中,我想获得一个直方图,其中y值是yA和yB值的加权平均值,其权重由它们的误差的倒数给出。
这是数据处理中的相当标准的操作,我期望可以使用某些实用程序来对gnuplot直方图进行此操作。 事实证明,我找不到此实用程序...
所以我想问一下是否有这样的程序已经做到了。 如果它不存在,我想以什么语言写一个建议。 我已经在Wolfram Mathematica中做了一些事情,但是现在我想在Unix shell中执行操作,所以我想知道python是操纵gnuplot文件的好选择还是还有更合适的东西。
谢谢罗伯托
更确切地说,我在.gnu文件中有直方图,有人以这种格式给我
# comments
set title "sqrt(p^2(5)) distribution" font "Helvetica, 20"
set xlabel "sqrt(p^2(5))" font "Helvetica, 20"
set ylabel "d{/Symbol s}/dsqrt(p^2(5))" font "Helvetica, 20"
set xrange [ 0.00000: 40.00000]
plot "-" with histeps
4.50000 3986.18 1.27863
5.50000 3986.18 1.27863
6.50000 3986.18 1.27863
e
set title "m(5) distribution" font "Helvetica, 20"
set xlabel "m(5)" font "Helvetica, 20"
set ylabel "d{/Symbol s}/dm(5)" font "Helvetica, 20"
set xrange [ 0.00000: 40.00000]
plot "-" with histeps
4.50000 3986.18 1.27863
5.50000 3986.18 1.27863
6.50000 3986.18 1.27863
e
我想从此文件中提取所有数据以合并,例如,我在多个文件中拥有的m(5)直方图(如上所述,组合均值是加权平均值)。 有什么快速的方法可以在Python中读取此数据并处理直方图以将它们组合起来?
是的,Python和Numpy是一个很好的选择。 如果文件每行仅包含固定数量的数字,则可以使用numpy.loadtxt函数读取它们,并使用savetxt写入它们。 否则,您将不得不使用常规的Python IO例程。
最简单的方法是使用paste
合并两个文件(假设两个文件中的x值相同且顺序相同),然后在gnuplot中进行计算。
考虑两个测试文件A.txt
1 5 1
2 1 2
和B.txt
:
1 3 1
2 4 1
使用脚本
set style fill solid noborder
set boxwidth 0.8 relative
set yrange [0:*]
weighted_avg(yA, dyA, yB, dyB) = ((yA/dyA + yB/dyB)/(1.0/dyA + 1.0/dyB))
plot '< paste A.txt B.txt' using 1:(weighted_avg($2, $3, $5, $6)) with boxes notitle
您得到以下直方图
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.