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

如何在箱线图(boxplot)中显示分位数(quantiles)的数值

箱线图四分位数标注实现方案

R(ggplot2环境)实现

直接用stat_summary函数计算并标注四分位数即可,示例代码如下:

# 加载依赖包
library(ggplot2)

# 构造示例数据:2个分类变量、1个连续变量
set.seed(123)
plot_data <- data.frame(
  group = rep(c("分类1", "分类2"), each = 200),
  value = c(rnorm(200, mean = 50, sd = 10), rnorm(200, mean = 65, sd = 12))
)

# 绘制带四分位数标注的箱线图
ggplot(plot_data, aes(x = group, y = value)) +
  geom_boxplot(width = 0.4) +
  # 标注Q1、中位数、Q3数值
  stat_summary(
    fun = quantile,
    geom = "text", 
    aes(label = after_stat(ifelse(y %in% quantile(y, c(0.25,0.5,0.75)), round(y,1), ""))),
    position = position_nudge(x = 0.22), # 调整横向偏移量避免和箱体重叠
    size = 3.5
  )

如果需要调整标注的样式、位置,修改position_nudge参数以及size、color参数即可。


Python(seaborn+matplotlib)实现

先计算各分组四分位数,再叠加文本标注即可,示例代码如下:

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

# 构造示例数据
np.random.seed(123)
plot_data = pd.DataFrame({
    "group": np.repeat(["分类1", "分类2"], 200),
    "value": np.concatenate([np.random.normal(50,10,200), np.random.normal(65,12,200)])
})

# 计算每个分组的Q1、中位数、Q3
quants = plot_data.groupby("group")["value"].quantile([0.25,0.5,0.75]).reset_index()

# 绘图
plt.figure(figsize=(6,5))
ax = sns.boxplot(x="group", y="value", data=plot_data, width=0.4)

# 叠加标注
x_loc = {"分类1":0, "分类2":1} # 各分类对应的x轴坐标
for group in x_loc.keys():
    q_values = quants[quants["group"]==group]["value"].values
    for val in q_values:
        ax.text(x_loc[group]+0.2, val, round(val,1), ha="center", va="center", fontsize=10)

plt.show()

代码里的x_loc[group]+0.2是控制标注的横向偏移量,数值越大标注离箱体越远,可根据实际显示效果调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:39:02