【问题标题】:How to set x values for pandas histograms to match bins如何为 pandas 直方图设置 x 值以匹配 bin
【发布时间】:2019-07-17 17:30:23
【问题描述】:

假设我有一个像这样的数据框:

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)?

附: 我了解this 的答案有一个解决方法,如果可能的话,我想要一个使用 pandas.hist 的解决方案。

【问题讨论】:

    标签: python-3.x pandas histogram


    【解决方案1】:

    您可以通过对 bins 参数使用 list/sequence 来做到这一点。

    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 用于 arange 因为这将为 xtick 标签生成 [0,1,2,3] ,将在 0-1 放置一个条,在 [1,2] 再放置一个,然后在 [2] 再放置一个-3],我可以通过从全部减去 0.5 将它们全部向右移动以居中对齐。

    导致

    【讨论】:

    • 谢谢,但这并没有真正给我以 0、1 和 2 为中心的垃圾箱
    • 我对您的原始数据进行了修改,以便您清楚。
    • 赞成,谢谢!另请参阅我的发现并随时发表评论。
    【解决方案2】:

    我想我只是通过玩弄各种参数找到了答案,尽管我不太确定我是否理解范围的工作原理。

    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 的组合如何工作,我很乐意接受别人的答案而不是我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-12-06
      • 2015-07-10
      相关资源
      最近更新 更多