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

geom_boxplot绘制汇总数据集时IQR箱线不显示问题求助

问题解决:汇总数据绘制箱线图时IQR箱体不显示

问题原因

geom_boxplot默认是为原始观测数据设计的,它会自动从原始数据中计算中位数、四分位数等统计量。但你的数据集是预先汇总好的统计结果(仅包含中位数、Q25、Q75等),geom_boxplot无法识别这些预计算的值,因此无法生成IQR箱体。

解决方案

改用stat_summary手动构建箱线的各个部分,它支持直接使用预计算的统计值绘制箱体和中位数线。以下是修改后的完整代码:

mucca_summary_median <- data.frame(
  session = c("baseline_diff", "visit_12mo_diff", "visit_18mo_diff", "baseline_diff", "visit_12mo_diff", "visit_18mo_diff"),
  studienarm = as.factor(c(1, 1, 1, 2, 2, 2)),
  count = c(28, 28, 28, 25, 25, 25),
  median_value = c(0.0000000, 0.1477152, 0.2282074, 0.0000000, -0.2257790, 0.4806886),
  lower_q25 = c(0.0000000, -0.9442851, -2.0962150, 0.0000000, -1.0870302, -2.5670724),
  upper_q75 = c(0.000000, 1.931601, 1.415828, 0.000000, 2.028250, 2.474128),
  lower_ci25 = c(0.000000, -8.983193, -8.046044, 0.000000, -12.077256, -15.471589),
  upper_ci975 = c(0.000000, 6.628575, 4.123004, 0.000000, 6.212714, 5.943969)
)

mucca_long <- ggplot(mucca_summary_median, aes(x = session, color = studienarm)) + 
  # 绘制IQR箱体:用矩形展示Q25到Q75的范围
  stat_summary(
    aes(ymin = lower_q25, ymax = upper_q75, y = median_value),
    geom = "rect",
    position = position_dodge(width = 0.1),
    alpha = 0.2,
    width = 0.1
  ) +
  # 绘制中位数点
  stat_summary(
    aes(y = median_value),
    geom = "point",
    position = position_dodge(width = 0.1),
    size = 3
  ) +
  geom_line(aes(y = median_value, group = studienarm), position = position_dodge(width = 0.1)) +
  geom_errorbar(aes(ymin = lower_ci25, ymax = upper_ci975, y = median_value), 
                width = 0.25, linewidth = 1, position = position_dodge(width = 0.1)) + 
  labs(x = "Session", y = expression(~Delta~ "MUCCA"/"cm"^2)) +
  labs(color = "Treatment arm") +
  scale_color_manual(labels = c("High dose", "Low dose"), values = c("#1f77b4", "#ff7f0e")) +
  geom_hline(yintercept = 0) +
  scale_x_discrete(labels = c("Baseline", "12 months", "18 months"))

print(mucca_long)

关键修改说明

  • 用stat_summary(geom = "rect")绘制IQR箱体:指定ymin为Q25、ymax为Q75,宽度和位置偏移与其他元素保持一致,确保分组对齐。
  • 用stat_summary(geom = "point")标记中位数,也可以替换为geom = "line"绘制横向中位数线。
  • 替换了原代码中values = c(1,2)的颜色设置,改用更直观的蓝橙配色,避免颜色辨识度低的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:43:14