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

如何为Seaborn绘制的箱线图添加四分位数与中位数标签

Seaborn箱线图添加四分位数、中位数数值标签实现方案

核心实现思路:

  • 先按箱线图的分组维度计算箱线对应的五数概括(最小值、25%分位数Q1、中位数、75%分位数Q3、最大值),统计结果的分组顺序要和图上实际展示的分组顺序完全对齐
  • 遍历每个分组对应的坐标轴位置,将统计数值标注到箱线对应点位上,通过小幅度偏移避免文字和箱线元素重叠

完整可运行代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
plt.figure(figsize=(20,8))
box_plot = sns.boxplot(x="total_bill", y="day", orient='h', data=tips)

# 获取图上实际展示的y轴分组顺序,避免标签错位
group_order = [tick.get_text() for tick in box_plot.get_yticklabels()]
# 按分组计算需要的分位数统计值
group_stats = tips.groupby("day")["total_bill"].describe(percentiles=[0.25, 0.5, 0.75]).loc[group_order]

# 遍历每个分组添加数值标签
for y_pos, (_, stats_row) in enumerate(group_stats.iterrows()):
    # 配置每个统计值的标注位置偏移,可根据视觉效果调整
    label_items = [
        (stats_row["min"], -0.2),
        (stats_row["25%"], 0.12),
        (stats_row["50%"], 0.12),
        (stats_row["75%"], 0.12),
        (stats_row["max"], 0.12)
    ]
    for val, x_offset in label_items:
        box_plot.text(
            x=val + x_offset,
            y=y_pos,
            s=f"{val:.1f}",
            va="center",
            fontsize=10,
            color="#2d2d2d"
        )

plt.tight_layout()
plt.show()

关键注意事项:

  • 如果绘制纵向箱线图,只需互换标注逻辑里的x、y坐标,调整偏移方向即可
  • 代码中的偏移量、字体大小、数值保留小数位数都可以根据图的尺寸、数值范围灵活调整,保证标签清晰不重叠
  • 不要硬编码分组顺序,必须通过坐标轴刻度获取当前实际展示的分组顺序,否则容易出现标签和箱线错位的问题

实现效果参考:
箱线图标注效果示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:39:20