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

R语言绘制多列箱线图及均值标准差参考线错位问题求解

R箱线图绘制代码修正方案

原代码错误点

  • 冗余无效行:plotorder <- sort(unique(df2$SAMPLE_NO)) 错误访问列表df2中不存在的SAMPLE_NO字段,无实际作用还可能触发报错
  • 坐标轴范围逻辑错误:coord_cartesian(ylim = as.numeric(c(min(.y),max(.y)))) 中.y是指标名称字符串,取最值得到的是字符串排序结果,而非对应指标的数值范围
  • 参考线计算错误:第三条红色参考线误将标准差作为基准值计算,导致参考线位置完全偏移

修正后完整代码

首先加载依赖包:

library(tidyverse)

绘图代码:

imap(df2, ~{
  # 提取当前指标的数值列,用于设置合理的y轴范围
  current_col <- df[[.y]]
  ggplot(df, outlier.shape = NA, 
         mapping = aes(x = SAMPLE_NO, y = .data[[.y]], color = SAMPLE_NO)) +
    stat_boxplot(geom = 'errorbar')+
    # 用实际数值的范围设置y轴,小幅扩展避免图形贴边
    coord_cartesian(ylim = range(current_col) * c(0.99, 1.01))+
    geom_boxplot(outlier.shape = NA) +
    geom_hline(linetype = 'dashed', color = 'blue', size = 0.75,
               yintercept = .x[["hm"]]) + # 直接通过字段名取均值,避免索引错误
    geom_hline(linetype = 'dashed', color = 'firebrick', size = 0.75,
               yintercept = .x[["hm"]] - .x[["hsd"]] * 3) + # 均值减3倍标准差
    geom_hline(linetype = 'dashed', color = 'firebrick', size = 0.75,
               yintercept = .x[["hm"]] + .x[["hsd"]] * 3) + # 修正为均值加3倍标准差
    ggtitle(paste0(.y, " 均匀性箱线图")) +
    theme(plot.title = element_text(hjust = 0.5)) +
    xlab(label = "样品编号") +
    ylab(paste0(.y, ' 含量占比(%)'))
}) -> list_plot_box
# 输出所有生成的箱线图
list_plot_box

修正效果说明

  • 自动匹配df2中存储的所有指标,4个指标都会生成对应的箱线图,不会出现缺漏
  • 所有参考线位置匹配实际均值、3倍标准差的计算逻辑,无偏移问题
  • 坐标轴范围自动适配不同指标的量级,不会出现数据被截断的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:00