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

如何在R语言箱线图中标注Q1、中位数、Q3及异常值?

给R基础箱线图添加Q1、中位数、Q3和异常值标注

嘿,作为R新手能自己画出箱线图已经超棒啦!要给图补上这些关键数值其实很简单,咱们用基础绘图工具就能搞定,也可以用更灵活的ggplot2来实现,两种方法都给你整理好了:

方法一:用R基础绘图包实现

首先咱们得先提取箱线图的核心统计数据,R自带的boxplot.stats()函数能直接帮我们拿到Q1、中位数、Q3还有异常值,然后用text()函数把这些数值标注到图上就行:

# 定义你的数据集
mydata <- c(154,109,137,115,152,140,154,178,101,103,126,126,137,165,165,129,200,148)

# 获取箱线图的统计信息
bp_stats <- boxplot.stats(mydata)
# 提取需要的数值
q1_val <- bp_stats$stats[2]    # Q1是统计列表里的第2个值
median_val <- bp_stats$stats[3] # 中位数是第3个
q3_val <- bp_stats$stats[4]    # Q3是第4个
outliers <- bp_stats$out       # 异常值存在out元素里

# 绘制箱线图
boxplot(mydata, main = "SSHA Data", horizontal = TRUE, staplewex = 1, xlab = "Scores")

# 标注Q1、中位数、Q3,把文字放在箱子上方(y=1.2),用颜色区分更清晰
text(x = q1_val, y = 1.2, labels = paste("Q1 =", q1_val), col = "blue")
text(x = median_val, y = 1.2, labels = paste("Median =", median_val), col = "red")
text(x = q3_val, y = 1.2, labels = paste("Q3 =", q3_val), col = "green")

# 标注异常值,放在箱子下方(y=0.8),循环处理多个异常值
for (val in outliers) {
  text(x = val, y = 0.8, labels = paste("Outlier =", val), col = "darkorange")
}

小提示:

如果文字有重叠,你可以调整y参数的数值(比如改成1.1或1.3),或者给text()加个pos参数(比如pos=3表示在上方,pos=1在下方)来微调位置。

方法二:用ggplot2实现(更美观灵活)

如果你想让图看起来更精致,试试ggplot2包,它的统计标注功能更直观:

library(ggplot2)

# 把向量转成数据框(ggplot需要数据框格式)
df <- data.frame(Scores = mydata)
# 先获取异常值(和之前一样)
bp_stats <- boxplot.stats(mydata)
outliers <- bp_stats$out

ggplot(df, aes(y = 1, x = Scores)) +
  # 绘制水平箱线图
  geom_boxplot(horizontal = TRUE) +
  # 标注Q1(保留1位小数更整洁)
  geom_text(stat = "summary", fun = quantile, fun.args = list(probs = 0.25),
            aes(label = paste("Q1 =", round(..x.., 1))), y = 1.2, color = "blue") +
  # 标注中位数
  geom_text(stat = "summary", fun = median,
            aes(label = paste("Median =", ..x..)), y = 1.2, color = "red") +
  # 标注Q3(保留1位小数)
  geom_text(stat = "summary", fun = quantile, fun.args = list(probs = 0.75),
            aes(label = paste("Q3 =", round(..x.., 1))), y = 1.2, color = "green") +
  # 标注异常值
  geom_text(data = df %>% filter(Scores %in% outliers),
            aes(label = paste("Outlier =", Scores)), y = 0.8, color = "darkorange") +
  # 添加标题和坐标轴标签
  labs(title = "SSHA Data", x = "Scores") +
  # 用简洁的主题
  theme_minimal() +
  # 隐藏无意义的y轴元素
  theme(axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank())

这样运行之后,你的箱线图上就会清晰显示所有需要的数值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:45:14