繁体   English   中英

在gnuplot中组合直方图(bin计数的加权平均值)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM