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

如何在seaborn箱线图中设置IQR为10%~90%分位范围

Seaborn箱线图自定义IQR为10%~90%分位范围的实现方案

可以实现,不需要修改seaborn底层源码,通过透传参数或手动计算分位即可完成。

  • 仅调整箱线须为10%90%分位(保留箱体默认25%75% IQR)
    这是最常见的需求,直接传入whis参数即可,seaborn会自动将该参数透传给底层matplotlib的箱线图接口,示例代码如下:

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # 加载示例数据集,可替换为自有数据
    tips = sns.load_dataset("tips")
    
    # 绘制自定义分位范围的箱线图
    sns.boxplot(
        x="day",
        y="total_bill",
        data=tips,
        whis=[10, 90] # 核心参数,指定须线覆盖10%~90%分位范围
    )
    plt.show()
    
  • 调整箱体本身为10%~90%分位
    如果需要把箱体的上下边界从默认的25%、75%改为10%、90%,需要先手动计算对应分组的分位值再绘制,示例代码如下:

    import seaborn as sns
    import pandas as pd
    import matplotlib.pyplot as plt
    
    tips = sns.load_dataset("tips")
    # 按分组维度计算10%、50%、90%分位值
    group_stats = tips.groupby("day")["total_bill"].quantile([0.1, 0.5, 0.9]).unstack()
    group_stats.columns = ["q10", "median", "q90"]
    
    fig, ax = plt.subplots()
    # 基于自定义分位值绘制箱线图
    bxp_stats = [
        {"med": row["median"], "q1": row["q10"], "q3": row["q90"], "whislo": row["q10"], "whishi": row["q90"]}
        for _, row in group_stats.iterrows()
    ]
    ax.bxp(bxp_stats, showfliers=False)
    # 替换x轴刻度为分组名称
    ax.set_xticklabels(group_stats.index)
    plt.show()
    

提示:如果设置自定义分位后不需要展示默认规则判定的离群点,可以补充参数showfliers=False关闭离群点渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:03