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

如何按分组创建箱线图?实现R语言多ID箱线图同页对比展示

解决方案:为每个ID生成同页面对比的箱线图

没问题!用R的ggplot2包就能快速实现你的需求——把每个ID对应的箱线图放在同一画布上,方便直接对比数据分布。下面是针对你的数据集的完整步骤:

1. 加载你的数据集

首先把你提供的数据集导入到R中:

# 加载数据集
df <- structure(list(ID = c("F1", "F1", "F1", "F1", "F1", "F1", "F1", "F2", "F2", "F2", "F2", "F2", "F2", "F2", "F2", "F3", "F3", "F3", "F3", "F3", "F3", "F3", "F3", "F3", "F4", "F4", "F4", "F4", "F4", "F4", "F4", "F4"), Date = c("22/6/2021", "23/6/2021", "24/6/2021", "25/6/2021", "26/6/2021", "27/6/2021", "28/6/2021", "22/6/2021", "23/6/2021", "24/6/2021", "25/6/2021", "26/6/2021", "27/6/2021", "28/6/2021", "29/6/2021", "22/6/2021", "23/6/2021", "24/6/2021", "25/6/2021", "26/6/2021", "27/6/2021", "28/6/2021", "29/6/2021", "30/6/2021", "22/6/2021", "23/6/2021", "24/6/2021", "25/6/2021", "26/6/2021", "27/6/2021", "28/6/2021", "29/6/2021"), Values = c(9.6, 9.8, 10.2, 9.8, 9.9, 9.9, 9.9, 1.2, 1.2, 1.8, 1.5, 1.5, 1.6, 1.4, 1.1, 3266, 3256, 7044, 6868, 6556, 3405, 3410, 3980, 5567, 59.4, 56, 52.8, 52.4, 55.5, 54, 61, 53.6)), class = "data.frame", row.names = c(NA, -32L))

2. 安装并加载ggplot2包

如果你还没安装ggplot2,先执行安装命令:

install.packages("ggplot2")

然后加载包:

library(ggplot2)

3. 生成同页面的箱线图

用ggplot函数构建绘图对象,指定x轴为ID,y轴为Values,然后用geom_boxplot()绘制箱线图,还可以添加一些美化元素让图表更清晰:

ggplot(df, aes(x = ID, y = Values)) +
  geom_boxplot(fill = "#4292c6", alpha = 0.7) +  # 设置箱线图填充色和透明度
  labs(title = "各ID的Values分布箱线图",
       x = "ID编号",
       y = "Values数值") +
  theme_minimal() +  # 使用简洁的主题
  theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))  # 居中标题并调整样式

执行这段代码后,你就能得到一张包含所有ID箱线图的画布,直接对比每个ID的数值分布(中位数、四分位数、异常值等)。

额外优化建议

注意到你的数据中不同ID的Values数值量级差异很大(比如F3的数值是几千,F2只有1左右),如果觉得直接对比不够清晰,可以尝试以下两种优化方式:

  • 使用对数坐标轴:在绘图代码中添加scale_y_log10(),让小数值的分布更明显:
    ggplot(df, aes(x = ID, y = Values)) +
      geom_boxplot(fill = "#4292c6", alpha = 0.7) +
      scale_y_log10() +  # 对数转换y轴
      labs(title = "各ID的Values分布箱线图(对数坐标轴)",
           x = "ID编号",
           y = "Values数值(对数)") +
      theme_minimal() +
      theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))
    
  • 分面展示:如果想保留原始数值尺度,也可以用分面把每个ID的箱线图单独展示但放在同一页面:
    ggplot(df, aes(x = ID, y = Values)) +
      geom_boxplot(fill = "#4292c6", alpha = 0.7) +
      facet_wrap(~ID, scales = "free_y") +  # 按ID分面,y轴自由缩放
      labs(title = "各ID的Values分布箱线图(分面展示)",
           x = "ID编号",
           y = "Values数值") +
      theme_minimal() +
      theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))
    

这样就能根据你的需求选择最适合的展示方式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:17:46