如何绘制直方图的密度而不是计数? (Matplotlib)

时间:2019-03-21 15:23:29

标签: python pandas matplotlib statistics histogram

我有一个名为“ train”的数据框,其列为“ string”,列为“ string length”,列为“ rank”,其等级范围为0-4。

我想为每个排名创建字符串长度的直方图,并将所有直方图绘制在一张图上进行比较。我遇到了两个问题:

我唯一能够做到这一点的方法是创建单独的数据集,例如使用以下类型的代码:

S0 = train.loc[train['rank'] == 0]
S1 = train.loc[train['rank'] == 1]

然后,我使用以下方法为每个数据集创建单独的直方图:

plt.hist(train['string length'], bins = 100)
plt.show()

此代码不绘制密度,而是绘制计数。如何更改代码以绘制密度呢?

是否还有一种方法可以不必创建单独的数据集?有人告诉我我的方法是'unpythonic'

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

df.loc[:, df.columns != 'string'].groupby('rank').hist(density=True, bins =10, figsize=(5,5))

基本上,它的作用是选择string以外的所有列,按rank分组,并根据参数对所有列进行直方图绘制。

设置为density=True的密度参数以一种标准化方式绘制,如

希望这有所帮助。

编辑

如果有更多变量,并且您希望直方图重叠,请尝试:

df.groupby('rank')['string length'].hist(density=True, histtype='step', bins =10,figsize=(5,5))