假设我有一个数据框,如:
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)
在此输入图像描述
然而,我得到一个有三个箱子的图片,第一个从0到0.7,第二个从0.7到1.4,第三个从1.4到2,而我希望每个箱子以0,1和2为中心。我甚至尝试过使用ax.set_lim,但它没有用。
如何使我的直方图以我感兴趣的值为中心(所以一个bin从-0.5到0.5,一个从0.5到1.5,一个从1.5到2.5)?
PS我明白这个答案有一个解决方法,我想要一个使用pandas.hist的解决方案,如果可能的话。
解决办法:可以通过使用list / sequence for 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来将所有这些移动到中心对齐。
解决办法:我想我只是通过玩各种参数找到答案,虽然我不太清楚我是否理解范围是如何工作的。
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))
这将产生以下直方图:
在此输入图像描述
如果有人想要添加另一个能够改进这个问题的答案,或者解释范围和set_xlim的组合是如何工作的,我会乐意接受别人的答案而不是我的答案。
在此输入图像描述








暂无数据