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

sns.histplot设置bins参数未生成指定数量分箱的原因及解决方法

问题原因

你在调用sns.histplot()时同时传入了binwidth和bins两个分箱控制参数,seaborn底层逻辑中binwidth的优先级高于bins,当两个参数同时存在时,程序会忽略你设置的bins取值,仅按照指定的步长计算分箱数量,所以你看到的分箱数和你设置的bins不一致。
以你给出的测试代码为例,col1的取值范围是1到15,binwidth=2的情况下,实际计算得到的分箱数约为7个,和你实际输出的图表分箱数匹配。

解决方案

根据你的需求选择对应修改方式即可:

  • 如果你需要固定分箱总数,直接删除binwidth参数,仅保留bins参数即可,修改后的代码示例如下:
    测试代码修改版:
import pandas as pd
import seaborn as sns

d = {'col1': [1, 2, 3, 4, 5, 6, 7, 8, 9 , 10 , 11 , 12, 13, 14, 15], 'col2': [1, 1, 1, 1, 1, 1, 2, 2, 2 , 2 , 2, 2, 2, 2, 2]}
df = pd.DataFrame(data=d)
sns.histplot(data=df, x='col1', multiple='dodge', hue='col2', bins=8)

业务代码修改版:

hist = sns.histplot(data=Data, x=y_data, multiple='dodge', ax=axes[0], hue=i[2][1], bins=10)
  • 如果你同时需要控制分箱步长和分箱总数,可以先根据数据的取值范围手动计算匹配的参数:先获取数据的最小值min_val和最大值max_val,如果要设置N个分箱,对应的步长应为(max_val - min_val)/N,此时两个参数同时传入不会发生冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:08