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

R Shiny中ggplot箱图分组重叠及异常点未隐藏问题解决

问题解决方案

核心问题修正点

  1. 箱图重叠:未配置分组与位置偏移参数,导致同时段多道路箱图堆叠
  2. 异常点未隐藏:仅设置outlier.size = NA无法彻底隐藏,需补充形状参数

修改后的完整代码

假设你的aggregated_data包含time_slot(时段)、road_id(道路标识)、avg_speed(平均速度)字段,修改后的Shiny绘图代码如下:

output$speed_boxplot <- renderPlot({
  # 确保数据加载完成后再绘图
  req(aggregated_data)
  
  ggplot(aggregated_data, aes(x = time_slot, y = avg_speed, fill = road_id)) +
    geom_boxplot(
      # 设置并排偏移,width控制同时段箱图的间距,可按需调整(0.7-0.9都适用)
      position = position_dodge(width = 0.8),
      # 彻底隐藏异常点,两个参数配合使用避免版本兼容问题
      outlier.shape = NA,
      outlier.size = NA
    ) +
    labs(
      x = "时段",
      y = "平均速度",
      fill = "道路"
    ) +
    theme_minimal() +
    # 若时段标签过长,旋转x轴文本避免重叠
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
})

关键修改说明

箱图并排实现

  • 用fill = road_id(或你的道路名称字段)告诉ggplot按道路分组,自动区分同时段的不同箱图
  • position = position_dodge(width = 0.8)是核心:让同x轴(时段)下的分组箱图横向并排,width值越大,箱图间距越宽
  • 若time_slot是数值类型,先转成因子:aggregated_data$time_slot <- as.factor(aggregated_data$time_slot),防止x轴按数值连续排列导致箱图错位

异常点彻底隐藏

部分版本的ggplot2中,仅设置outlier.size = NA仍会显示极小的异常点标记,同时设置outlier.shape = NA会直接禁用异常点的绘制逻辑,确保完全隐藏

可选优化

  • 若想用边框颜色区分道路而非填充,把fill = road_id换成color = road_id,并在geom_boxplot里设置fill = "white"之类的填充色
  • 如果道路数量较多,可添加scale_fill_brewer()或自定义颜色映射,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:16:01