n, bins, patches = plt.hist(yield_s, num_bins, normed=True, facecolor='blue', alpha=0.5)
print max(n)
plt.show() #直接显示直方图
bins_s = pd.Series(bins)
bins_down = bins_s.shift(-1)
center = (bins_s + bins_down) / 2 #直方图bar的中心刻度
center = np.array(center[0:-1])
bins_df = pd.DataFrame(columns=['center', 'bin'])
bins_df['center'] = pd.Series(center)
bins_df['bin'] = pd.Series(n)
bins_df.to_csv(data_path + 'yield_bins.txt', index=False) #将直方图bar的中心及所对应的归一化的值保存起来
注意:
normed为True代表我们要使用归一化数据(所占比例)在y轴,为False表示每个期间所占个数
normed=True 的含义:
官方文档说明:If True, the first element of the return tuple will be the counts normalized to form a probability density, i.e., n/(len(x)`dbin), i.e., the integral of the histogram will sum to 1.
开始我以为normalized(归一化?)之后,直方图y轴上显示的是该数据组的概率,所以每组的概率总和应该是1,但是上面的例子明显不符合。生成随机数来试验,发现理解有误。normed=True的作用是形成概率密度,即图形在x轴上的积分为1,而不是在y轴上的值之和为1.y轴上的值是多少,取决于数据组的区间大小。因为面积=宽度*高度,所以高度=面积/宽度。那什么情况下normalized之后,y轴上会显示数据组的概率呢,自然是组区间正好等于1的时候。
2. 含有空值会报错
n, bins, patches = plt.hist(factor, num_bins, normed=1, facecolor='blue', alpha=0.5)
ValueError: max must be larger than min in range parameter.