Python matplotlib直方图和实际频率不';不匹配
我有一个名为“年龄”系列的熊猫数据框。在该数据框中,我附加了另一个名为“年龄组”的系列,如下所示:Python matplotlib直方图和实际频率不';不匹配,python,matplotlib,Python,Matplotlib,我有一个名为“年龄”系列的熊猫数据框。在该数据框中,我附加了另一个名为“年龄组”的系列,如下所示: bins = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65] df['Age Group'] = pd.cut(df['Age'], bins=bins) 现在,我已经验证了年龄组,例如(40,45]和(45,50)]应该分别呈现5和10的频率。但是,pyplot直方图呈现了错误的频率(分别为2和13…下面三个和上面三个)。我确定这是
bins = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65]
df['Age Group'] = pd.cut(df['Age'], bins=bins)
现在,我已经验证了年龄组,例如(40,45]和(45,50)]应该分别呈现5和10的频率。但是,pyplot直方图呈现了错误的频率(分别为2和13…下面三个和上面三个)。我确定这是一个左/右垃圾箱边界问题,但我不确定如何解决。有人能帮忙吗?我的可视化代码如下
plt.hist(df['Age'], bins=bins, ec='gray', alpha=0.3)
plt.xlabel('Age')
plt.ylabel('Count')
plt.show()
plt.hist
使用[a,b)
而pd.cut
使用(a,b]
,将right=False
传递给pd.cut
将给出与plt.hist
相同的答案。谢谢,但是柱状图给出了不准确的表示。是否有方法确保柱状图准确?您可以执行bin=np.array(bin)+0.01
操作。您还可以使用pd.cut(df['Age')查看箱子,bins=bins)。value_counts().plot.bar()
…有效!谢谢!你知道为什么需要添加0.01吗?这很直观…边界条件。因为[40.01,45.01]==(40,45]=={41,42,43,44,45}
在整数方面是有效的。当然,如果Age
不是整数,它就不起作用:-)。