【发布时间】:2014-09-15 19:28:51
【问题描述】:
我正在尝试为 csv 文件中的给定数据集绘制概率分布函数
import numpy as np
import math
import matplotlib.pyplot as plt
data=np.loadtxt('data.csv',delimiter=',',skiprows=1)
x_value1= data[:,1]
x_value2= data[:,2]
weight1= data[:,3]
weight2= data[:,4]
其中 weight1 是一个数据数组,表示 x_value1 中数据的权重,而 weight2 表示 x_value2 的权重。我生成了一个直方图,我将权重放入参数中
plt.hist(x_value1,bins=40,color='r', normed=True, weights=weight1, alpha=0.8, label='x_value1')
plt.hist(x_value2, bins=40,color='b', normed=True, weights=weight2, alpha=0.6, label='x_value2')
我现在的问题是将此 PDF 转换为 CDF。我从这里的一篇文章中读到,您可以使用 numpy.cumsum() 将一组数据转换为 CDF,因此我将其与 np.histogram() 一起尝试
values1,base1= np.histogram(x_value1, bins=40)
values2,base2= np.histogram(x_value2, bins=40)
cumulative1=np.cumsum(values1)
cumulative2=np.cumsum(values2)
plt.plot(base1[:-1],cumulative1,c='red',label='x_value1')
plt.plot(base2[:-1],cumulative2,c='blue',label='x_value2')
plt.title("CDF for x_value1 and x_value2")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
我不知道这个图是否正确,因为我在做 CDF 时没有包括权重(weight1 和 weight2)。如何在绘制 CDF 时包含权重?
【问题讨论】:
-
background和signal与x_value1和x_value2有什么关系?另外,你所有的权重都是整数值吗? -
您的 pdf 数据中似乎出现了峰值。对于最高值,我希望它更像零。您可能在加载数据文件时遇到问题,或出现其他错误。这也会影响 cdf。
-
@Brionius:对此感到抱歉。这只是错字。我编辑了问题。
-
@Salixalba:我确信我加载数据的方式没有问题。我只想在构建 CDF 时包含 weight1 和 weight2
-
但您确实需要注意数据中的异常值。这样的异常值会影响计算均值和标准差。
标签: python numpy matplotlib