如何用ggplot2基于多列数据绘制多水平箱线图?
解决多列数据绘制多水平箱线图的问题
你遇到的问题根源是当前数据为宽格式,而ggplot绘制多分组箱线图需要长格式数据。以下是具体解决步骤:
1. 加载必要工具包
需要用到tidyverse(包含数据转换的tidyr和绘图的ggplot2):
library(tidyverse)
2. 将宽格式数据转换为长格式
把原数据中多个任务列合并为任务名称列,同时保留年龄和完成状态信息:
example_long <- example %>% pivot_longer( cols = -Age, # 排除Age列,转换其余所有任务列 names_to = "Task", # 新列名:任务名称 values_to = "Completed" # 新列名:是否完成任务 ) %>% filter(Completed == "yes") # 仅保留完成任务的记录
3. 绘制水平箱线图
用转换后的长格式数据绘图,x轴对应年龄,y轴对应任务名称:
ggplot(example_long, aes(x = Age, y = Task)) + geom_boxplot() + labs( x = "年龄", y = "任务", title = "儿童完成各项任务的年龄分布" ) + theme_minimal()
关键说明
- 原代码中直接用
c(...)指定y轴是错误的,ggplot要求y轴是数据框中的单个列变量,长格式转换后生成的Task列正好满足这个要求。 - 过滤
Completed == "yes"是为了只统计完成对应任务的儿童年龄分布,和你想要展示的需求匹配。
内容的提问来源于stack exchange,提问作者KingCrawDad
相关产品推荐
相关产品推荐

