如何用ggplot2在嵌套箱线图的中位数间绘制连线?
给嵌套分组箱线图的中位数添加连线
你有一组数据,每个个体被分为「满意(Satisfied)」或「不满意(Dissatisfied)」两类,同时对应两种距离类型(DistType A和B)。目前已能绘制基础箱线图,但无法给不同分组的中位数添加连线,目标是让同一种距离类型的「满意」和「不满意」组中位数之间用线连接。
解决方案
要实现这个效果,需要先计算各组的中位数,再用geom_line()绘制连线,同时保证箱线图与连线位置对齐:
计算分组中位数
使用dplyr包按满意度和距离类型分组,计算每组的中位数:library(dplyr) median_data <- data %>% group_by(satisfaction, DistType) %>% summarise(median_dist = median(Dist), .groups = "drop")绘制带连线的箱线图
在原有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
相关产品推荐
相关产品推荐

