使用熊猫的频率密度图

用户480184

我创建了一个熊猫数据框,如下所示

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 的宽度被保留。改变高度以反映频率。

在此处输入图片说明

凯文_1

这是一个示例,它可以让您使用直方图参数接近您想要的结果normed=1,它为您提供所需的直方图形状。使用matplotlib.pyplot as pltthen缩放直方图的高度会给你你想要的:

fig = df_hist2.plot.hist(bins=[0,1,3,5,10,24], edgecolor='black', linewidth=1.2,
                   normed=True) 
plt.yticks(fig.get_yticks(), [int(x) for x in fig.get_yticks() * len(df_hist2)])

您可以根据自己的喜好进一步自定义 y 刻度的确切值。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章