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

如何从Seaborn的sns.displot()中获取分箱范围与计数数组?

从sns.displot()提取分箱范围和计数数组

因为sns.displot()是基于FacetGrid的Figure级绘图函数,和旧版distplot()的Axes级逻辑不同,你可以通过以下步骤提取数据:

  • 第一步:绘制分布图并获取FacetGrid实例
    先调用displot()并把结果赋值给变量,比如:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成示例数据
    data = np.random.normal(size=1000)
    g = sns.displot(data, bins=10)
    
  • 第二步:提取Axes对象并获取直方图数据
    从FacetGrid中取出对应的Axes,然后通过Axes的patches属性或者直接调用matplotlib的统计方法获取分箱和计数:
    方法一:通过patches提取

    # 获取第一个子图的Axes
    ax = g.axes[0, 0]
    # 初始化存储数据的列表
    bin_ranges = []
    counts = []
    
    # 遍历每个直方图柱子(patch)
    for patch in ax.patches:
        # 获取柱子的左右边界,即分箱范围
        left = patch.get_x()
        right = left + patch.get_width()
        bin_ranges.append((left, right))
        # 获取柱子高度,即该分箱的计数
        counts.append(patch.get_height())
    
    # 转换为数组
    bin_ranges = np.array(bin_ranges)
    counts = np.array(counts)
    

    方法二:直接调用numpy的直方图统计
    如果绘制displot时没有自定义复杂分箱规则,也可以直接用numpy的histogram()对原始数据做相同分箱统计,结果和displot完全一致:

    counts, bin_edges = np.histogram(data, bins=10)
    # bin_edges是分箱边界数组,转换为分箱范围对
    bin_ranges = np.array(list(zip(bin_edges[:-1], bin_edges[1:])))
    
  • 验证结果
    两种方法得到的counts和bin_ranges会和displot绘制的直方图完全匹配,你可以打印输出确认:

    print("分箱范围:")
    print(bin_ranges)
    print("计数:")
    print(counts)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:27:11