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

如何用ggplot2在嵌套箱线图的中位数间绘制连线?

给嵌套分组箱线图的中位数添加连线

你有一组数据,每个个体被分为「满意(Satisfied)」或「不满意(Dissatisfied)」两类,同时对应两种距离类型(DistType A和B)。目前已能绘制基础箱线图,但无法给不同分组的中位数添加连线,目标是让同一种距离类型的「满意」和「不满意」组中位数之间用线连接。

解决方案

要实现这个效果,需要先计算各组的中位数,再用geom_line()绘制连线,同时保证箱线图与连线位置对齐:

  1. 计算分组中位数
    使用dplyr包按满意度和距离类型分组,计算每组的中位数:

    library(dplyr)
    median_data <- data %>%
      group_by(satisfaction, DistType) %>%
      summarise(median_dist = median(Dist), .groups = "drop")
    
  2. 绘制带连线的箱线图
    在原有ggplot代码基础上,添加连线和中位数标记点,通过position_dodge()确保元素对齐:

    library(ggplot2)
    ggplot(data) +
      # 绘制基础箱线图,设置dodge宽度保证对齐
      geom_boxplot(aes(x = satisfaction, y = Dist, fill = DistType), 
                   position = position_dodge(width = 0.8)) +
      # 绘制中位数连线,按DistType分组
      geom_line(data = median_data, 
                aes(x = satisfaction, y = median_dist, group = DistType, color = DistType),
                position = position_dodge(width = 0.8), size = 1) +
      # 添加中位数标记点
      geom_point(data = median_data, 
                 aes(x = satisfaction, y = median_dist, color = DistType),
                 position = position_dodge(width = 0.8), size = 3) +
      # 调整标签,让图表更清晰
      labs(fill = "距离类型", color = "距离类型", y = "距离", x = "满意度") +
      theme_minimal()
    

关键说明

  • position_dodge(width = 0.8):让并列的箱线图、连线、点保持同一水平位置,避免错位;
  • group = DistType:指定按距离类型分组连线,确保同类型的两个中位数被正确连接;
  • 添加geom_point()可以更直观地突出中位数的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:12:44