Gre*_*gor 5 python matplotlib histogram
我在使用时遇到问题hist().我创建了一个包含396个条目的数组,其中包含了每个可能的结果
X + 0.5 Y + Z,
Run Code Online (Sandbox Code Playgroud)
在哪里0 <= X,Z <=5和0 <= Y <= 10.我想要创建的是频率直方图,其条形高度与在x,y,z独立,均匀分布的假设下获取特定值的概率一致.我以为我会hist()尝试一下:
import pandas as pd
import matplotlib.pyplot as plt
def activity(x,y,z):
return 1 * x + 0.5 * y + 1 * z
rangex = np.arange(6)
rangey = np.arange(11)
rangez = np.arange(6)
rhs = 10
activities = [activity(x,y,z) for x in rangex for y in rangey for z in rangez]
activities = pd.Series(activities)
fig, axes = plt.subplots(1,1)
n, bins, patches = axes.hist(activities, bins=np.linspace(-0.25, 15.25, num=32), \
normed=True)
Run Code Online (Sandbox Code Playgroud)
这是奇怪的事情:n总计2!通过选择bins,我确保每个项目恰好落入1个bin中,并且我知道正好有31个箱子,因为我的值范围是0到15,步长为0.5.
对不起,我无法简化这个例子.具有100个值的随机试验产生正确的频率.相反,这就是直方图的样子:
从图中可以看出,频率不总和为1.例如,在高度为0.1或更高的中心11条中.然而,红色图的频率总和为1.
我的问题:为什么我会出现错误的规范化?
请参阅以下代码以手动计算正确的直方图:
barposs, barheight = zip(*activities.value_counts(normalize=True).iteritems())
plt.bar(np.array(barposs) - 0.25, np.array(barheight), width=0.5, color='red')
Run Code Online (Sandbox Code Playgroud)
我很感激任何有用的评论.
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |