You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取pandas中dataframe.hist生成直方图的默认分箱区间

获取DataFrame.hist生成直方图的默认分箱区间

其实这个问题的核心在于理解DataFrame.hist()的底层实现——它本质上是对DataFrame的每一列调用Matplotlib的plt.hist(),只是帮你封装了多列子图的布局逻辑,所以我们可以从返回的子图对象里提取分箱信息,或者直接复用它的默认逻辑手动获取。

下面给你两种可行的方法:

方法一:从返回的子图对象中提取分箱区间

当你调用df.hist()时,会得到一个AxesSubplot对象(单列)或者Axes对象数组(多列)。每个子图的直方图由多个矩形(patch)组成,我们可以通过这些patch的位置和宽度来还原分箱区间:

import pandas as pd
import numpy as np

# 生成示例数据
df = pd.DataFrame(np.random.randn(1000, 2), columns=['A', 'B'])
# 绘制直方图并获取子图数组
ax_array = df.hist()

# 以第一列(A列)的子图为例
ax = ax_array[0][0]

# 收集所有分箱的左边界
bins_left = [patch.get_x() for patch in ax.patches]
# 获取最后一个分箱的右边界
last_bin_right = ax.patches[-1].get_x() + ax.patches[-1].get_width()
# 合并为完整的分箱区间数组
bins = bins_left + [last_bin_right]

print("A列的默认分箱区间:", bins)

如果是多列的情况,只需要遍历ax_array中的每个子图,重复上述步骤即可。

方法二:手动调用plt.hist复用默认逻辑

既然DataFrame.hist()是对每一列调用plt.hist(),那我们可以直接对单列数据调用plt.hist(),它会返回包含分箱区间的元组,这样更直接:

import matplotlib.pyplot as plt

for col in df.columns:
    # plt.hist返回(频数数组, 分箱区间数组, 图形元素)
    counts, bins, patches = plt.hist(df[col])
    print(f"{col}列的默认分箱区间:", bins)
    # 可以选择关闭当前图,避免重复绘制
    plt.close()

补充说明

DataFrame.hist()返回子图对象是为了方便你后续调整图表样式(比如添加标题、修改刻度),而plt.hist()作为底层绘图函数,会直接返回统计计算的结果(频数、分箱)和图形元素。两者的默认分箱逻辑是完全一致的,所以两种方法得到的结果是相同的。

内容的提问来源于stack exchange,提问作者user32882

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:52:59