如何从重叠的直方图箱中停止pyplot?

时间:2017-08-24 15:25:11

标签: python matplotlib histogram

我确定这是一个简单的答案,我只是看错了,但是我的pyplot直方图发生了什么?这是输出;数据包含年龄在18到24岁之间的参与者,没有分数年龄(没有人18.5):

UIDevice currentDevice model possible values

为什么这些箱子像这样交错?当前宽度设置为1,因此每个条形应该是一个bin的宽度,对吧?当宽度小于0.5时,问题变得更加严重,当条形看起来像是在完全不同的箱子中时。

以下是代码:

{{1}}

谢谢!

1 个答案:

答案 0 :(得分:4)

plt.hist没有任何参数width。如果指定了width,则会将其提供给底层补丁,这意味着矩形的宽度为1。这与直方图的bin宽度无关,我猜想在直方图调用中几乎没有理由使用width

而你想要的是指定箱子。您可能还想在两个直方图中使用相同的bin。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(5)
import pandas as pd

csv = pd.DataFrame({"age" : np.random.randint(18,27, 20),
                    "gender" : np.random.randint(1,3,20)})

age = csv.age
gender = csv.gender

new_age = age[~np.isnan(age)]
new_age_f = new_age[gender==2]
new_age_m = new_age[gender==1]

bins = np.arange(new_age.values.min(),new_age.values.max()+2)

plt.hist(new_age_f, alpha=.40, label='Female', bins=bins, ec="k")
plt.hist(new_age_m, alpha=.40, label='Male', bins=bins,  ec="k")

plt.legend()

plt.show()

enter image description here