假设我有一个数据框,例如:
test = pandas.DataFrame([[0,1],[0,1],[0,2],[1,0],[1,0],[1,1],[1,2],[1,2]], columns=["A","B"])
因此,对于第一列中的值1,第二列中的值为0,1,2,且频率不同。
说我想为我看到0、1和2的次数创建一个直方图,所以我这样做:
ax = test[test["A"]==1]["B"].hist(bins=3)
但是,我得到的图片包含三个bin,第一个从0到0.7大致分布,第二个从0.7到1.4,第三个从1.4到2,而我希望每个bin都以0,1为中心和2.我什至尝试使用ax.set_lim,但是没有用。
如何使直方图以我感兴趣的值为中心(例如,一个bin从-0.5到0.5,一个从0.5到1.5,而另一个从1.5到2.5)?
P.S。 我了解this的答案有一种解决方法,如果可能的话,我想使用pandas.hist的解决方案。
答案 0 :(得分:1)
您可以通过对bins参数使用列表/序列来做到这一点。
test = pd.DataFrame([[0,1],[0,1],[0,2],[1,0],[1,0],[1,1],[1,2],[1,2]], columns=["A","B"])
test
df = test[test["A"]==1]["B"]
df.hist(bins = np.arange(4)-0.5)
我将4用作范围,因为这将为xtick标签生成[0,1,2,3],一个小节将放置在0-1处,另一个放置在[1,2],然后再放置一个在[2] -3],我可以将它们全部减去0.5,以将它们全部向右对齐。
结果
答案 1 :(得分:0)
我想我只是通过玩弄各种参数找到了答案,尽管我不确定我是否知道范围是如何工作的。
test = pandas.DataFrame([[0,1],[0,1],[0,2],[1,0],[1,0],[1,1],[1,2],[1,2]], columns=["A","B"])
test[test["A"]==1]["B"]
ax = test[test["A"]==1]["B"].hist(bins=3, range=(-0.5,2.5))
ax.set_xlim((-0.5, 2.5))
这将产生以下直方图:
如果有人想添加另一个答案来改善这个答案,或者说明range和set_xlim的组合是如何工作的,我很乐意接受别人的答案,而不是我的答案。