如何阻止pyplot重叠直方图箱?

Inf*_*nce 3 python matplotlib histogram

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

具有重叠 bin 的 pyplot 直方图

为什么垃圾桶是这样交错排列的?当前宽度设置为 1,所以每个条应该是一个 bin 的宽度,对吗?当宽度小于 0.5 时,问题会变得更糟,当条形看起来像是在完全不同的 bin 中时。

这是代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

csv = pd.read_csv('F:\Python\Delete\Delete.csv')

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]

plt.hist(new_age_f, alpha=.80, label='Female', width=1, align='left')
plt.hist(new_age_m, alpha=.80, label='Male', width=1, align='left')

plt.legend()

plt.show()
Run Code Online (Sandbox Code Playgroud)

谢谢!

Imp*_*est 5

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明