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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绘制直方图的密度而非计数? (Matplotlib)相关的知识,希望对你有一定的参考价值。

我有一个名为'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'

答案

你可以这样做:

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))

以上是关于如何绘制直方图的密度而非计数? (Matplotlib)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB如何将概率密度向量绘制到直方图上?

绘制直方图,使直方图的总面积等于 1(密度)

使用 ggplot2 沿平滑曲线绘制直方图或密度

如何计算密度直方图中的高度(它们的总和不等于 1)?

如何在 R 中绘制预分箱直方图

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(添加直方图分组颜色配置)实战(density plot)