【发布时间】:2019-04-01 17:47:53
【问题描述】:
我创建了一个如下所示的 pandas 数据框
df_hist2 = pd.DataFrame({'Score':np.random.uniform(0,1,4300)}).append(
pd.DataFrame({'Score':np.random.uniform(1,3,6900)}),ignore_index=True).append(
pd.DataFrame({'Score':np.random.uniform(3,5,4900)}),ignore_index=True).append(
pd.DataFrame({'Score':np.random.uniform(5,10,2000)}),ignore_index=True).append(
pd.DataFrame({'Score':np.random.uniform(10,24,2100)}),ignore_index=True);
我可以从中创建一个直方图,如下所示
df_hist2.plot.hist(bins=[0,1,3,5,10,24], edgecolor='black', linewidth=1.2)
它是这样的
但是,我想创建一个显示频率密度的直方图,而不仅仅是显示频率的位置
频率密度 = 频率 / bin 的宽度
我可以绘制一个条形图,在其中我可以为每个箱(“0-1”、“1-3”等)创建一个类别并手动计算密度。但是,有没有更优雅和简单的方法来做到这一点?
此外,以条形图方式进行操作还需要我首先从数据中计算频率。 (在这种情况下我知道,因为我是手动生成数据,但在真实数据的情况下不知道)
我想要的是有一些东西可以计算和绘制以下内容
Hours | Frequency | Width | Density |
--------------------------------------------|
0 - 1 | 4300 | 1 | 4300/1 = 4300 |
1 - 3 | 6900 | 2 | 6900/2 = 3450 |
3 - 5 | 4900 | 2 | 4900/2 = 2450 |
5 - 10 | 2000 | 5 | 2000/5 = 400 |
10 - 24 | 2100 | 14 | 2100/14 = 150 |
还有一个类似于以下内容的图(在 excel 中完成并进行了一些手动编辑)
注意:间隔/bin 的宽度被保留。更改高度以反映频率。
【问题讨论】:
标签: python pandas histogram frequency